{"version":3,"file":"webamp.bundle.min.mjs","sources":["../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/dist/jszip.min.js","../../../node_modules/.pnpm/strtok3@10.3.1/node_modules/strtok3/lib/stream/Errors.js","../../../node_modules/.pnpm/strtok3@10.3.1/node_modules/strtok3/lib/stream/AbstractStreamReader.js","../../../node_modules/.pnpm/strtok3@10.3.1/node_modules/strtok3/lib/stream/WebStreamReader.js","../../../node_modules/.pnpm/strtok3@10.3.1/node_modules/strtok3/lib/stream/WebStreamByobReader.js","../../../node_modules/.pnpm/strtok3@10.3.1/node_modules/strtok3/lib/stream/WebStreamDefaultReader.js","../../../node_modules/.pnpm/strtok3@10.3.1/node_modules/strtok3/lib/AbstractTokenizer.js","../../../node_modules/.pnpm/strtok3@10.3.1/node_modules/strtok3/lib/ReadStreamTokenizer.js","../../../node_modules/.pnpm/strtok3@10.3.1/node_modules/strtok3/lib/BufferTokenizer.js","../../../node_modules/.pnpm/strtok3@10.3.1/node_modules/strtok3/lib/core.js","../../../node_modules/.pnpm/strtok3@10.3.1/node_modules/strtok3/lib/stream/WebStreamReaderFactory.js","../../../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js","../../../node_modules/.pnpm/token-types@6.0.3/node_modules/token-types/lib/index.js","../../../node_modules/.pnpm/fflate@0.8.2/node_modules/fflate/esm/browser.js","../../../node_modules/.pnpm/debug@4.4.1/node_modules/debug/src/common.js","../../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js","../../../node_modules/.pnpm/debug@4.4.1/node_modules/debug/src/browser.js","../../../node_modules/.pnpm/@tokenizer+inflate@0.2.7/node_modules/@tokenizer/inflate/lib/ZipToken.js","../../../node_modules/.pnpm/@tokenizer+inflate@0.2.7/node_modules/@tokenizer/inflate/lib/index.js","../../../node_modules/.pnpm/uint8array-extras@1.4.0/node_modules/uint8array-extras/index.js","../../../node_modules/.pnpm/file-type@21.0.0/node_modules/file-type/util.js","../../../node_modules/.pnpm/file-type@21.0.0/node_modules/file-type/core.js","../../../node_modules/.pnpm/file-type@21.0.0/node_modules/file-type/supported.js","../../../node_modules/.pnpm/content-type@1.0.5/node_modules/content-type/index.js","../../../node_modules/.pnpm/media-typer@1.1.0/node_modules/media-typer/index.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/matroska/types.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ParseError.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/common/Util.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/id3v2/ID3v2Token.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/common/GenericTagTypes.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/common/GenericTagMapper.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/id3v1/ID3v1TagMap.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/common/CaseInsensitiveTagMap.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/id3v2/ID3v24TagMapper.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/asf/AsfTagMapper.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/id3v2/ID3v22TagMapper.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/apev2/APEv2TagMapper.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/mp4/MP4TagMapper.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ogg/vorbis/VorbisTagMapper.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/riff/RiffInfoTagMap.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/matroska/MatroskaTagMapper.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/aiff/AiffTagMap.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/common/CombinedTagMapper.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/common/MetadataCollector.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/lrc/LyricsParser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/mpeg/MpegLoader.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/apev2/Apev2Loader.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/asf/AsfLoader.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/dsdiff/DsdiffLoader.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/aiff/AiffLoader.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/dsf/DsfLoader.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/flac/FlacLoader.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/matroska/MatroskaLoader.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/mp4/Mp4Loader.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/musepack/MusepackLoader.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ogg/OggLoader.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/wavpack/WavPackLoader.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/wav/WaveLoader.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ParserFactory.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/common/BasicParser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/common/FourCC.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/apev2/APEv2Token.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/apev2/APEv2Parser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/id3v1/ID3v1Parser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/lyrics3/Lyrics3.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/core.js","../../../node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/.pnpm/react@19.1.0/node_modules/react/jsx-runtime.js","../../../node_modules/.pnpm/scheduler@0.26.0/node_modules/scheduler/cjs/scheduler.production.js","../../../node_modules/.pnpm/scheduler@0.26.0/node_modules/scheduler/index.js","../../../node_modules/.pnpm/react@19.1.0/node_modules/react/cjs/react.production.js","../../../node_modules/.pnpm/react@19.1.0/node_modules/react/index.js","../../../node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/cjs/react-dom.production.js","../../../node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/index.js","../../../node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/cjs/react-dom-client.production.js","../../../node_modules/.pnpm/react-dom@19.1.0_react@19.1.0/node_modules/react-dom/client.js","../../../node_modules/.pnpm/use-sync-external-store@1.2.2_react@19.1.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../../../node_modules/.pnpm/use-sync-external-store@1.2.2_react@19.1.0/node_modules/use-sync-external-store/shim/index.js","../../../node_modules/.pnpm/use-sync-external-store@1.2.2_react@19.1.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../../../node_modules/.pnpm/use-sync-external-store@1.2.2_react@19.1.0/node_modules/use-sync-external-store/shim/with-selector.js","../../../node_modules/.pnpm/react-redux@8.1.3_@types+react-dom@18.2.24_@types+react@18.2.74_react-dom@19.1.0_react@19.1.0__react@19.1.0_redux@5.0.1/node_modules/react-redux/es/utils/batch.js","../../../node_modules/.pnpm/react-redux@8.1.3_@types+react-dom@18.2.24_@types+react@18.2.74_react-dom@19.1.0_react@19.1.0__react@19.1.0_redux@5.0.1/node_modules/react-redux/es/components/Context.js","../../../node_modules/.pnpm/react-redux@8.1.3_@types+react-dom@18.2.24_@types+react@18.2.74_react-dom@19.1.0_react@19.1.0__react@19.1.0_redux@5.0.1/node_modules/react-redux/es/hooks/useReduxContext.js","../../../node_modules/.pnpm/react-redux@8.1.3_@types+react-dom@18.2.24_@types+react@18.2.74_react-dom@19.1.0_react@19.1.0__react@19.1.0_redux@5.0.1/node_modules/react-redux/es/hooks/useSelector.js","../../../node_modules/.pnpm/react-redux@8.1.3_@types+react-dom@18.2.24_@types+react@18.2.74_react-dom@19.1.0_react@19.1.0__react@19.1.0_redux@5.0.1/node_modules/react-redux/es/utils/useSyncExternalStore.js","../../../node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/cjs/react-is.production.min.js","../../../node_modules/.pnpm/react-is@18.3.1/node_modules/react-is/cjs/react-is.production.min.js","../../../node_modules/.pnpm/react-redux@8.1.3_@types+react-dom@18.2.24_@types+react@18.2.74_react-dom@19.1.0_react@19.1.0__react@19.1.0_redux@5.0.1/node_modules/react-redux/es/utils/Subscription.js","../../../node_modules/.pnpm/react-redux@8.1.3_@types+react-dom@18.2.24_@types+react@18.2.74_react-dom@19.1.0_react@19.1.0__react@19.1.0_redux@5.0.1/node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","../../../node_modules/.pnpm/react-redux@8.1.3_@types+react-dom@18.2.24_@types+react@18.2.74_react-dom@19.1.0_react@19.1.0__react@19.1.0_redux@5.0.1/node_modules/react-redux/es/components/Provider.js","../../../node_modules/.pnpm/react-redux@8.1.3_@types+react-dom@18.2.24_@types+react@18.2.74_react-dom@19.1.0_react@19.1.0__react@19.1.0_redux@5.0.1/node_modules/react-redux/es/hooks/useStore.js","../../../node_modules/.pnpm/react-redux@8.1.3_@types+react-dom@18.2.24_@types+react@18.2.74_react-dom@19.1.0_react@19.1.0__react@19.1.0_redux@5.0.1/node_modules/react-redux/es/hooks/useDispatch.js","../../../node_modules/.pnpm/redux@5.0.1/node_modules/redux/dist/redux.mjs","../../../node_modules/.pnpm/react-redux@8.1.3_@types+react-dom@18.2.24_@types+react@18.2.74_react-dom@19.1.0_react@19.1.0__react@19.1.0_redux@5.0.1/node_modules/react-redux/es/index.js","../../../node_modules/.pnpm/redux-thunk@2.4.2_redux@5.0.1/node_modules/redux-thunk/es/index.js","../../../node_modules/.pnpm/@redux-devtools+extension@3.3.0_redux@5.0.1/node_modules/@redux-devtools/extension/lib/esm/index.js","../../js/constants.ts","../../js/utils.ts","../../js/reducers/playlist.ts","../../js/reducers/windows.ts","../../js/reducers/media.ts","../../../node_modules/.pnpm/reselect@3.0.1/node_modules/reselect/lib/index.js","../../js/reducers/display.ts","../../js/reducers/userInput.ts","../../js/reducers/equalizer.ts","../../js/reducers/settings.ts","../../../node_modules/.pnpm/invariant@2.2.4/node_modules/invariant/browser.js","../../js/fileUtils.ts","../../js/trackUtils.ts","../../js/reducers/tracks.ts","../../js/types.ts","../../js/reducers/milkdrop.ts","../../js/reducers/index.ts","../../js/reducers/network.ts","../../js/playlistHtml.tsx","../../js/selectors.ts","../../js/resizeUtils.ts","../../js/marqueeUtils.tsx","../../js/snapUtils.ts","../../js/actionCreators/windows.ts","../../winamp-eqf/built/constants.js","../../js/skinSprites.ts","../../js/skinParserUtils.ts","../js/skinParser.js","../../js/regionParser.ts","../../../node_modules/.pnpm/tinyqueue@1.2.3/node_modules/tinyqueue/index.js","../../js/actionCreators/playlist.ts","../../js/actionCreators/equalizer.ts","../../js/actionCreators/files.ts","../js/loadQueue.js","../../winamp-eqf/built/parser.js","../../winamp-eqf/built/creator.js","../../js/actionCreators/media.ts","../../js/actionCreators/milkdrop.ts","../../js/actionCreators/index.ts","../../js/mediaMiddleware.ts","../../js/store.ts","../../../node_modules/.pnpm/fscreen@1.2.0/node_modules/fscreen/dist/fscreen.esm.js","../../js/components/Fullscreen.tsx","../../js/hooks.ts","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.js","../../js/components/ResizeTarget.tsx","../../js/components/FocusTarget.tsx","../../js/components/WinampButton.tsx","../../js/components/GenWindow/index.tsx","../../js/components/MilkdropWindow/Visualizer.tsx","../../js/components/MilkdropWindow/Background.tsx","../../js/components/MilkdropWindow/PresetOverlay.tsx","../../js/components/DropTarget.tsx","../../js/components/ContextMenu.tsx","../../js/components/ContextMenuWrapper.tsx","../../js/components/MilkdropWindow/MilkdropContextMenu.tsx","../../js/components/MilkdropWindow/Desktop.tsx","../../js/components/MilkdropWindow/index.tsx","../../js/components/PlaybackContextMenu.tsx","../../js/components/SkinsContextMenu.tsx","../../js/components/OptionsContextMenu.tsx","../../js/components/MainWindow/MainContextMenu.tsx","../../js/components/WindowManager.tsx","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_basePropertyOf.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_deburrLetter.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_root.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_freeGlobal.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_Symbol.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isArray.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_getRawTag.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_objectToString.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseGetTag.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isSymbol.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_baseToString.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/_arrayMap.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/toString.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/isObjectLike.js","../../../node_modules/.pnpm/lodash@4.17.21/node_modules/lodash/deburr.js","../../js/components/Character.tsx","../../js/components/MiniTime.tsx","../../js/components/ClickedDiv.tsx","../../js/components/ContextMenuTarget.tsx","../../js/components/FFTNullsoft.ts","../../js/components/VisPainter.ts","../../js/components/Vis.tsx","../../js/components/MainWindow/ActionButtons.tsx","../../js/components/Balance.tsx","../../js/components/MainWindow/MainBalance.tsx","../../js/components/MainWindow/Close.tsx","../../js/components/MainWindow/ClutterBar.tsx","../../js/components/MainWindow/Eject.tsx","../../js/components/MainWindow/EqToggleButton.tsx","../../js/components/MainWindow/PlaylistToggleButton.tsx","../../js/components/CharacterString.tsx","../../js/components/MainWindow/Kbps.tsx","../../js/components/MainWindow/Khz.tsx","../../js/components/MainWindow/Marquee.tsx","../../js/components/MainWindow/MonoStereo.tsx","../../js/components/MainWindow/Position.tsx","../../js/components/MainWindow/Repeat.tsx","../../js/components/MainWindow/Shade.tsx","../../js/components/MainWindow/Minimize.tsx","../../js/components/MainWindow/Shuffle.tsx","../../js/components/MainWindow/Time.tsx","../../js/components/Volume.tsx","../../js/components/MainWindow/MainVolume.tsx","../../js/components/MainWindow/index.tsx","../../js/components/PlaylistWindow/PlaylistResizeTarget.tsx","../../js/components/PlaylistWindow/PlaylistShade.tsx","../../js/components/PlaylistWindow/PlaylistMenuEntry.tsx","../../js/components/PlaylistWindow/PlaylistMenu.tsx","../../js/components/PlaylistWindow/AddMenu.tsx","../../js/components/PlaylistWindow/RemoveMenu.tsx","../../js/components/PlaylistWindow/SelectionMenu.tsx","../../js/components/PlaylistWindow/SortContextMenu.tsx","../../js/components/PlaylistWindow/MiscOptionsContextMenu.tsx","../../js/components/PlaylistWindow/MiscMenu.tsx","../../js/components/PlaylistWindow/ListMenu.tsx","../../js/components/PlaylistWindow/RunningTimeDisplay.tsx","../../js/components/PlaylistWindow/PlaylistActionArea.tsx","../../js/components/PlaylistWindow/TrackCell.tsx","../../js/components/PlaylistWindow/TrackTitle.tsx","../../js/components/PlaylistWindow/TrackList.tsx","../../js/components/VerticalSlider.tsx","../../js/components/PlaylistWindow/PlaylistScrollBar.tsx","../../js/components/PlaylistWindow/index.tsx","../../js/components/EqualizerWindow/Band.tsx","../../js/components/EqualizerWindow/EqOn.tsx","../../js/components/EqualizerWindow/EqAuto.tsx","../js/components/EqualizerWindow/spline.js","../../js/components/EqualizerWindow/EqGraph.tsx","../../js/components/EqualizerWindow/PresetsContextMenu.tsx","../../js/components/EqualizerWindow/EqTitleButtons.tsx","../../js/components/EqualizerWindow/EqualizerShade.tsx","../../js/components/EqualizerWindow/index.tsx","../../js/skinSelectors.ts","../../js/components/Css.tsx","../../js/components/ClipPaths.tsx","../../../node_modules/.pnpm/endianness@8.0.2/node_modules/endianness/endianness.js","../../../node_modules/.pnpm/byte-data@18.1.1/node_modules/byte-data/lib/int-parser.js","../../../node_modules/.pnpm/ieee754-buffer@2.0.0/node_modules/ieee754-buffer/index.js","../../../node_modules/.pnpm/byte-data@18.1.1/node_modules/byte-data/index.js","../../../node_modules/.pnpm/utf8-buffer@1.0.0/node_modules/utf8-buffer/index.js","../../../node_modules/.pnpm/riff-file@1.0.3/node_modules/riff-file/index.js","../../ani-cursor/dist/parser.js","../../ani-cursor/dist/index.js","../../js/components/Skin.tsx","../../js/components/App.tsx","../../js/hotkeys.ts","../../js/emitter.ts","../../js/Disposable.ts","../js/media/StereoBalanceNode.js","../../js/media/elementSource.ts","../../js/media/index.ts","../../js/webampLazy.tsx","../../js/mediaSession.ts","../../js/setImmediate.ts","../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/support.js","../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/readable-stream-browser.js","../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/base64.js","../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/nodejsUtils.js","../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/external.js","../../../node_modules/.pnpm/lie@3.3.0/node_modules/lie/lib/browser.js","../../../node_modules/.pnpm/immediate@3.0.6/node_modules/immediate/lib/browser.js","../../../node_modules/.pnpm/jszip@3.10.1/node_modules/jszip/lib/utils.js","../../js/webamp.ts","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/id3v2/FrameParser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/id3v2/ID3v2Parser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/id3v2/AbstractID3Parser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/mpeg/ReplayGainDataFormat.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/mpeg/ExtendedLameHeader.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/mpeg/XingTag.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/mpeg/MpegParser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/asf/GUID.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/asf/AsfUtil.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/asf/AsfObject.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/asf/AsfParser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/dsdiff/DsdiffToken.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/dsdiff/DsdiffParser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/aiff/AiffToken.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/iff/index.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/aiff/AiffParser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/dsf/DsfChunk.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/dsf/DsfParser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ogg/vorbis/Vorbis.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ogg/vorbis/VorbisDecoder.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ogg/vorbis/VorbisStream.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/flac/FlacParser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ebml/types.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/matroska/MatroskaDtd.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ebml/EbmlIterator.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/matroska/MatroskaParser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/mp4/AtomToken.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/mp4/Atom.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/mp4/MP4Parser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/musepack/sv8/StreamVersion8.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/musepack/MusepackConentError.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/musepack/sv8/MpcSv8Parser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/musepack/sv7/BitReader.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/musepack/sv7/StreamVersion7.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/musepack/sv7/MpcSv7Parser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/musepack/MusepackParser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ogg/opus/Opus.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ogg/opus/OpusStream.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ogg/speex/Speex.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ogg/speex/SpeexStream.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ogg/theora/Theora.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ogg/theora/TheoraStream.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ogg/OggToken.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/ogg/OggParser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/wavpack/WavPackToken.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/wavpack/WavPackParser.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/riff/RiffChunk.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/wav/WaveChunk.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/wav/BwfChunk.js","../../../node_modules/.pnpm/music-metadata@11.6.0/node_modules/music-metadata/lib/wav/WaveParser.js"],"sourcesContent":["/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e<h.length;e++)u(h[e]);return u}({1:[function(e,t,r){\"use strict\";var d=e(\"./utils\"),c=e(\"./support\"),p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(e){for(var t,r,n,i,s,a,o,h=[],u=0,l=e.length,f=l,c=\"string\"!==d.getTypeOf(e);u<e.length;)f=l-u,n=c?(t=e[u++],r=u<l?e[u++]:0,u<l?e[u++]:0):(t=e.charCodeAt(u++),r=u<l?e.charCodeAt(u++):0,u<l?e.charCodeAt(u++):0),i=t>>2,s=(3&t)<<4|r>>4,a=1<f?(15&r)<<2|n>>6:64,o=2<f?63&n:64,h.push(p.charAt(i)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join(\"\")},r.decode=function(e){var t,r,n,i,s,a,o=0,h=0,u=\"data:\";if(e.substr(0,u.length)===u)throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,f=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,\"\")).length/4;if(e.charAt(e.length-1)===p.charAt(64)&&f--,e.charAt(e.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=c.uint8array?new Uint8Array(0|f):new Array(0|f);o<e.length;)t=p.indexOf(e.charAt(o++))<<2|(i=p.indexOf(e.charAt(o++)))>>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,n=function(e,t,r,n,i){var s=I.transformTo(\"string\",i(n));return R.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+A(e,2)+A(e,2)+A(t,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:n,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()}),e.on(\"error\",function(e){t.error(e)}),this},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(e){var t=this._sources;if(!i.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},s.prototype.lock=function(){i.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=s},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(e,t,r){\"use strict\";var u=e(\"../compressions\"),n=e(\"./ZipFileWorker\");r.generateWorker=function(e,a,t){var o=new n(a.streamFiles,t,a.platform,a.encodeFileName),h=0;try{e.forEach(function(e,t){h++;var r=function(e,t){var r=e||t,n=u[r];if(!n)throw new Error(r+\" is not a valid compression method !\");return n}(t.options.compression,a.compression),n=t.options.compressionOptions||a.compressionOptions||{},i=t.dir,s=t.date;t._compressWorker(r,n).withStreamInfo(\"file\",{name:e,dir:i,date:s,comment:t.comment||\"\",unixPermissions:t.unixPermissions,dosPermissions:t.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(e){o.error(e)}return o}},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(e,t,r){\"use strict\";function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");this.files=Object.create(null),this.comment=null,this.root=\"\",this.clone=function(){var e=new n;for(var t in this)\"function\"!=typeof this[t]&&(e[t]=this[t]);return e}}(n.prototype=e(\"./object\")).loadAsync=e(\"./load\"),n.support=e(\"./support\"),n.defaults=e(\"./defaults\"),n.version=\"3.10.1\",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e(\"./external\"),t.exports=n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(e,t,r){\"use strict\";var u=e(\"./utils\"),i=e(\"./external\"),n=e(\"./utf8\"),s=e(\"./zipEntries\"),a=e(\"./stream/Crc32Probe\"),l=e(\"./nodejsUtils\");function f(n){return new i.Promise(function(e,t){var r=n.decompressed.getContentWorker().pipe(new a);r.on(\"error\",function(e){t(e)}).on(\"end\",function(){r.streamInfo.crc32!==n.decompressed.crc32?t(new Error(\"Corrupted zip : CRC32 mismatch\")):e()}).resume()})}t.exports=function(e,o){var h=this;return o=u.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:n.utf8decode}),l.isNode&&l.isStream(e)?i.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):u.prepareContent(\"the loaded zip file\",e,!0,o.optimizedBinaryString,o.base64).then(function(e){var t=new s(o);return t.load(e),t}).then(function(e){var t=[i.Promise.resolve(e)],r=e.files;if(o.checkCRC32)for(var n=0;n<r.length;n++)t.push(f(r[n]));return i.Promise.all(t)}).then(function(e){for(var t=e.shift(),r=t.files,n=0;n<r.length;n++){var i=r[n],s=i.fileNameStr,a=u.resolve(i.fileNameStr);h.file(a,i.decompressed,{binary:!0,optimizedBinaryString:!0,date:i.date,dir:i.dir,comment:i.fileCommentStr.length?i.fileCommentStr:null,unixPermissions:i.unixPermissions,dosPermissions:i.dosPermissions,createFolders:o.createFolders}),i.dir||(h.file(a).unsafeOriginalName=s)}return t.zipComment.length&&(h.comment=t.zipComment),h})}},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../stream/GenericWorker\");function s(e,t){i.call(this,\"Nodejs stream input adapter for \"+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(s,i),s.prototype._bindStream=function(e){var t=this;(this._stream=e).pause(),e.on(\"data\",function(e){t.push({data:e,meta:{percent:0}})}).on(\"error\",function(e){t.isPaused?this.generatedError=e:t.error(e)}).on(\"end\",function(){t.isPaused?t._upstreamEnded=!0:t.end()})},s.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=s},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(e,t,r){\"use strict\";var i=e(\"readable-stream\").Readable;function n(e,t,r){i.call(this,t),this._helper=e;var n=this;e.on(\"data\",function(e,t){n.push(e)||n._helper.pause(),r&&r(t)}).on(\"error\",function(e){n.emit(\"error\",e)}).on(\"end\",function(){n.push(null)})}e(\"../utils\").inherits(n,i),n.prototype._read=function(){this._helper.resume()},t.exports=n},{\"../utils\":32,\"readable-stream\":16}],14:[function(e,t,r){\"use strict\";t.exports={isNode:\"undefined\"!=typeof Buffer,newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if(\"number\"==typeof e)throw new Error('The \"data\" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.pause&&\"function\"==typeof e.resume}}},{}],15:[function(e,t,r){\"use strict\";function s(e,t,r){var n,i=u.getTypeOf(t),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),\"string\"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(e=g(e)),s.createFolders&&(n=_(e))&&b.call(this,n,!0);var a=\"string\"===i&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(t instanceof c&&0===t.uncompressedSize||s.dir||!t||0===t.length)&&(s.base64=!1,s.binary=!0,t=\"\",s.compression=\"STORE\",i=\"string\");var o=null;o=t instanceof c||t instanceof l?t:p.isNode&&p.isStream(t)?new m(e,t):u.prepareContent(e,t,s.binary,s.optimizedBinaryString,s.base64);var h=new d(e,o,s);this.files[e]=h}var i=e(\"./utf8\"),u=e(\"./utils\"),l=e(\"./stream/GenericWorker\"),a=e(\"./stream/StreamHelper\"),f=e(\"./defaults\"),c=e(\"./compressedObject\"),d=e(\"./zipObject\"),o=e(\"./generate\"),p=e(\"./nodejsUtils\"),m=e(\"./nodejs/NodejsStreamInputAdapter\"),_=function(e){\"/\"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf(\"/\");return 0<t?e.substring(0,t):\"\"},g=function(e){return\"/\"!==e.slice(-1)&&(e+=\"/\"),e},b=function(e,t){return t=void 0!==t?t:f.createFolders,e=g(e),this.files[e]||s.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function h(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}var n={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(e){var t,r,n;for(t in this.files)n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n)},filter:function(r){var n=[];return this.forEach(function(e,t){r(e,t)&&n.push(t)}),n},file:function(e,t,r){if(1!==arguments.length)return e=this.root+e,s.call(this,e,t,r),this;if(h(e)){var n=e;return this.filter(function(e,t){return!t.dir&&n.test(e)})}var i=this.files[this.root+e];return i&&!i.dir?i:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(e,t){return t.dir&&r.test(e)});var e=this.root+r,t=b.call(this,e),n=this.clone();return n.root=t.name,n},remove:function(r){r=this.root+r;var e=this.files[r];if(e||(\"/\"!==r.slice(-1)&&(r+=\"/\"),e=this.files[r]),e&&!e.dir)delete this.files[r];else for(var t=this.filter(function(e,t){return t.name.slice(0,r.length)===r}),n=0;n<t.length;n++)delete this.files[t[n].name];return this},generate:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(e){var t,r={};try{if((r=u.extend(e||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:i.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),\"binarystring\"===r.type&&(r.type=\"string\"),!r.type)throw new Error(\"No output type specified.\");u.checkSupport(r.type),\"darwin\"!==r.platform&&\"freebsd\"!==r.platform&&\"linux\"!==r.platform&&\"sunos\"!==r.platform||(r.platform=\"UNIX\"),\"win32\"===r.platform&&(r.platform=\"DOS\");var n=r.comment||this.comment||\"\";t=o.generateWorker(this,r,n)}catch(e){(t=new l(\"error\")).error(e)}return new a(t,r.type||\"string\",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type=\"nodebuffer\"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=n},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(e,t,r){\"use strict\";t.exports=e(\"stream\")},{stream:void 0}],17:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data[this.zero+e]},i.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===t&&this.data[s+1]===r&&this.data[s+2]===n&&this.data[s+3]===i)return s-this.zero;return-1},i.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.readData(4);return t===s[0]&&r===s[1]&&n===s[2]&&i===s[3]},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],18:[function(e,t,r){\"use strict\";var n=e(\"../utils\");function i(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+e+\"). Corrupted zip ?\")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.end()}),e.on(\"error\",function(e){t.error(e)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r<t.length;r++)s+=t[r].length;switch(e){case\"string\":return t.join(\"\");case\"array\":return Array.prototype.concat.apply([],t);case\"uint8array\":for(i=new Uint8Array(s),r=0;r<t.length;r++)i.set(t[r],n),n+=t[r].length;return i;case\"nodebuffer\":return Buffer.concat(t);default:throw new Error(\"concat : unsupported type '\"+e+\"'\")}}(i,n),a);t(e)}catch(e){r(e)}n=[]}).resume()})}function f(e,t,r){var n=t;switch(t){case\"blob\":case\"arraybuffer\":n=\"uint8array\";break;case\"base64\":n=\"string\"}try{this._internalType=n,this._outputType=t,this._mimeType=r,h.checkSupport(n),this._worker=e.pipe(new i(n)),e.lock()}catch(e){this._worker=new s(\"error\"),this._worker.error(e)}}f.prototype={accumulate:function(e){return l(this,e)},on:function(e,t){var r=this;return\"data\"===e?this._worker.on(e,function(e){t.call(r,e.data,e.meta)}):this._worker.on(e,function(){h.delay(t,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(h.checkSupport(\"nodestream\"),\"nodebuffer\"!==this._outputType)throw new Error(this._outputType+\" is not supported by this method\");return new o(this,{objectMode:\"nodebuffer\"!==this._outputType},e)}},t.exports=f},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(e,t,r){\"use strict\";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,r.nodebuffer=\"undefined\"!=typeof Buffer,r.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:\"application/zip\"}).size}catch(e){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(n),r.blob=0===i.getBlob(\"application/zip\").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e(\"readable-stream\").Readable}catch(e){r.nodestream=!1}},{\"readable-stream\":16}],31:[function(e,t,s){\"use strict\";for(var o=e(\"./utils\"),h=e(\"./support\"),r=e(\"./nodejsUtils\"),n=e(\"./stream/GenericWorker\"),u=new Array(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;u[254]=u[254]=1;function a(){n.call(this,\"utf-8 decode\"),this.leftOver=null}function l(){n.call(this,\"utf-8 encode\")}s.utf8encode=function(e){return h.nodebuffer?r.newBufferFrom(e,\"utf-8\"):function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=h.uint8array?new Uint8Array(o):new Array(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t<s;)if((n=e[t++])<128)a[r++]=n;else if(4<(i=u[n]))a[r++]=65533,t+=i-1;else{for(n&=2===i?31:3===i?15:7;1<i&&t<s;)n=n<<6|63&e[t++],i--;1<i?a[r++]=65533:n<65536?a[r++]=n:(n-=65536,a[r++]=55296|n>>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}e(\"setimmediate\"),a.newBlob=function(t,r){a.checkSupport(\"blob\");try{return new Blob([t],{type:r})}catch(e){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(t),n.getBlob(r)}catch(e){throw new Error(\"Bug : can't construct the Blob.\")}}};var i={stringifyByChunk:function(e,t,r){var n=[],i=0,s=e.length;if(s<=r)return String.fromCharCode.apply(null,e);for(;i<s;)\"array\"===t||\"nodebuffer\"===t?n.push(String.fromCharCode.apply(null,e.slice(i,Math.min(i+r,s)))):n.push(String.fromCharCode.apply(null,e.subarray(i,Math.min(i+r,s)))),i+=r;return n.join(\"\")},stringifyByChar:function(e){for(var t=\"\",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(e){return!1}}()}};function s(e){var t=65536,r=a.getTypeOf(e),n=!0;if(\"uint8array\"===r?n=i.applyCanBeUsed.uint8array:\"nodebuffer\"===r&&(n=i.applyCanBeUsed.nodebuffer),n)for(;1<t;)try{return i.stringifyByChunk(e,r,t)}catch(e){t=Math.floor(t/2)}return i.stringifyByChar(e)}function f(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}a.applyFromCharCode=s;var c={};c.string={string:n,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return c.string.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:function(e){return l(e,r.allocBuffer(e.length))}},c.array={string:s,array:n,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(e)}},c.arraybuffer={string:function(e){return s(new Uint8Array(e))},array:function(e){return f(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:n,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(new Uint8Array(e))}},c.uint8array={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:n,nodebuffer:function(e){return r.newBufferFrom(e)}},c.nodebuffer={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return c.nodebuffer.uint8array(e).buffer},uint8array:function(e){return f(e,new Uint8Array(e.length))},nodebuffer:n},a.transformTo=function(e,t){if(t=t||\"\",!e)return t;a.checkSupport(e);var r=a.getTypeOf(t);return c[r][e](t)},a.resolve=function(e){for(var t=e.split(\"/\"),r=[],n=0;n<t.length;n++){var i=t[n];\".\"===i||\"\"===i&&0!==n&&n!==t.length-1||(\"..\"===i?r.pop():r.push(i))}return r.join(\"/\")},a.getTypeOf=function(e){return\"string\"==typeof e?\"string\":\"[object Array]\"===Object.prototype.toString.call(e)?\"array\":o.nodebuffer&&r.isBuffer(e)?\"nodebuffer\":o.uint8array&&e instanceof Uint8Array?\"uint8array\":o.arraybuffer&&e instanceof ArrayBuffer?\"arraybuffer\":void 0},a.checkSupport=function(e){if(!o[e.toLowerCase()])throw new Error(e+\" is not supported by this platform\")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(e){var t,r,n=\"\";for(r=0;r<(e||\"\").length;r++)n+=\"\\\\x\"+((t=e.charCodeAt(r))<16?\"0\":\"\")+t.toString(16).toUpperCase();return n},a.delay=function(e,t,r){setImmediate(function(){e.apply(r||null,t||[])})},a.inherits=function(e,t){function r(){}r.prototype=t.prototype,e.prototype=new r},a.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])Object.prototype.hasOwnProperty.call(arguments[e],t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},a.prepareContent=function(r,e,n,i,s){return u.Promise.resolve(e).then(function(n){return o.blob&&(n instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(n)))&&\"undefined\"!=typeof FileReader?new u.Promise(function(t,r){var e=new FileReader;e.onload=function(e){t(e.target.result)},e.onerror=function(e){r(e.target.error)},e.readAsArrayBuffer(n)}):n}).then(function(e){var t=a.getTypeOf(e);return t?(\"arraybuffer\"===t?e=a.transformTo(\"uint8array\",e):\"string\"===t&&(s?e=h.decode(e):n&&!0!==i&&(e=function(e){return l(e,o.uint8array?new Uint8Array(e.length):new Array(e.length))}(e))),e):u.Promise.reject(new Error(\"Can't read the data of '\"+r+\"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"))})}},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,setimmediate:54}],33:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),i=e(\"./utils\"),s=e(\"./signature\"),a=e(\"./zipEntry\"),o=e(\"./support\");function h(e){this.files=[],this.loadOptions=e}h.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+i.pretty(t)+\", expected \"+i.pretty(e)+\")\")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=o.uint8array?\"uint8array\":\"array\",r=i.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(e<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\"):new Error(\"Corrupted zip: can't find end of central directory\");this.reader.setIndex(e);var t=e;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(e=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(e),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var n=t-r;if(0<n)this.isSignature(t,s.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(n)+\" bytes.\")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=h},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),s=e(\"./utils\"),i=e(\"./compressedObject\"),a=e(\"./crc32\"),o=e(\"./utf8\"),h=e(\"./compressions\"),u=e(\"./support\");function l(e,t){this.options=e,this.loadOptions=t}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(t=function(e){for(var t in h)if(Object.prototype.hasOwnProperty.call(h,t)&&h[t].magic===e)return h[t];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+s.pretty(this.compressionMethod)+\" unknown (inner file : \"+s.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4<i;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n};e.setIndex(i)},handleUTF8:function(){var e=u.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=s.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=s.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileName)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileComment)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null}},t.exports=l},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(e,t,r){\"use strict\";function n(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=e(\"./stream/StreamHelper\"),i=e(\"./stream/DataWorker\"),a=e(\"./utf8\"),o=e(\"./compressedObject\"),h=e(\"./stream/GenericWorker\");n.prototype={internalStream:function(e){var t=null,r=\"string\";try{if(!e)throw new Error(\"No output type specified.\");var n=\"string\"===(r=e.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),t=this._decompressWorker();var i=!this._dataBinary;i&&!n&&(t=t.pipe(new a.Utf8EncodeWorker)),!i&&n&&(t=t.pipe(new a.Utf8DecodeWorker))}catch(e){(t=new h(\"error\")).error(e)}return new s(t,r,\"\")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||\"nodebuffer\").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof o&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new i(this._data)}};for(var u=[\"asText\",\"asBinary\",\"asNodeBuffer\",\"asUint8Array\",\"asArrayBuffer\"],l=function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},f=0;f<u.length;f++)n.prototype[u[f]]=l;t.exports=n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(e,l,t){(function(t){\"use strict\";var r,n,e=t.MutationObserver||t.WebKitMutationObserver;if(e){var i=0,s=new e(u),a=t.document.createTextNode(\"\");s.observe(a,{characterData:!0}),r=function(){a.data=i=++i%2}}else if(t.setImmediate||void 0===t.MessageChannel)r=\"document\"in t&&\"onreadystatechange\"in t.document.createElement(\"script\")?function(){var e=t.document.createElement(\"script\");e.onreadystatechange=function(){u(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},t.document.documentElement.appendChild(e)}:function(){setTimeout(u,0)};else{var o=new t.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var e,t;n=!0;for(var r=h.length;r;){for(t=h,h=[],e=-1;++e<r;)t[e]();r=h.length}n=!1}l.exports=function(e){1!==h.push(e)||n||r()}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],37:[function(e,t,r){\"use strict\";var i=e(\"immediate\");function u(){}var l={},s=[\"REJECTED\"],a=[\"FULFILLED\"],n=[\"PENDING\"];function o(e){if(\"function\"!=typeof e)throw new TypeError(\"resolver must be a function\");this.state=n,this.queue=[],this.outcome=void 0,e!==u&&d(this,e)}function h(e,t,r){this.promise=e,\"function\"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(t,r,n){i(function(){var e;try{e=r(n)}catch(e){return l.reject(t,e)}e===t?l.reject(t,new TypeError(\"Cannot resolve promise with itself\")):l.resolve(t,e)})}function c(e){var t=e&&e.then;if(e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof t)return function(){t.apply(e,arguments)}}function d(t,e){var r=!1;function n(e){r||(r=!0,l.reject(t,e))}function i(e){r||(r=!0,l.resolve(t,e))}var s=p(function(){e(i,n)});\"error\"===s.status&&n(s.value)}function p(e,t){var r={};try{r.value=e(t),r.status=\"success\"}catch(e){r.status=\"error\",r.value=e}return r}(t.exports=o).prototype.finally=function(t){if(\"function\"!=typeof t)return this;var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if(\"function\"!=typeof e&&this.state===a||\"function\"!=typeof t&&this.state===s)return this;var r=new this.constructor(u);this.state!==n?f(r,this.state===a?e:t,this.outcome):this.queue.push(new h(r,e,t));return r},h.prototype.callFulfilled=function(e){l.resolve(this.promise,e)},h.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},h.prototype.callRejected=function(e){l.reject(this.promise,e)},h.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},l.resolve=function(e,t){var r=p(c,t);if(\"error\"===r.status)return l.reject(e,r.value);var n=r.value;if(n)d(e,n);else{e.state=a,e.outcome=t;for(var i=-1,s=e.queue.length;++i<s;)e.queue[i].callFulfilled(t)}return e},l.reject=function(e,t){e.state=s,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},o.resolve=function(e){if(e instanceof this)return e;return l.resolve(new this(u),e)},o.reject=function(e){var t=new this(u);return l.reject(t,e)},o.all=function(e){var r=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var n=e.length,i=!1;if(!n)return this.resolve([]);var s=new Array(n),a=0,t=-1,o=new this(u);for(;++t<n;)h(e[t],t);return o;function h(e,t){r.resolve(e).then(function(e){s[t]=e,++a!==n||i||(i=!0,l.resolve(o,s))},function(e){i||(i=!0,l.reject(o,e))})}},o.race=function(e){var t=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var r=e.length,n=!1;if(!r)return this.resolve([]);var i=-1,s=new this(u);for(;++i<r;)a=e[i],t.resolve(a).then(function(e){n||(n=!0,l.resolve(s,e))},function(e){n||(n=!0,l.reject(s,e))});var a;return s}},{immediate:36}],38:[function(e,t,r){\"use strict\";var n={};(0,e(\"./lib/utils/common\").assign)(n,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=n},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(e,t,r){\"use strict\";var a=e(\"./zlib/deflate\"),o=e(\"./utils/common\"),h=e(\"./utils/strings\"),i=e(\"./zlib/messages\"),s=e(\"./zlib/zstream\"),u=Object.prototype.toString,l=0,f=-1,c=0,d=8;function p(e){if(!(this instanceof p))return new p(e);this.options=o.assign({level:f,method:d,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:\"\"},e||{});var t=this.options;t.raw&&0<t.windowBits?t.windowBits=-t.windowBits:t.gzip&&0<t.windowBits&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==l)throw new Error(i[r]);if(t.header&&a.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(n=\"string\"==typeof t.dictionary?h.string2buf(t.dictionary):\"[object ArrayBuffer]\"===u.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(r=a.deflateSetDictionary(this.strm,n))!==l)throw new Error(i[r]);this._dict_set=!0}}function n(e,t){var r=new p(t);if(r.push(e,!0),r.err)throw r.msg||i[r.err];return r.result}p.prototype.push=function(e,t){var r,n,i=this.strm,s=this.options.chunkSize;if(this.ended)return!1;n=t===~~t?t:!0===t?4:0,\"string\"==typeof e?i.input=h.string2buf(e):\"[object ArrayBuffer]\"===u.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new o.Buf8(s),i.next_out=0,i.avail_out=s),1!==(r=a.deflate(i,n))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==i.avail_out&&(0!==i.avail_in||4!==n&&2!==n)||(\"string\"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(i.output,i.next_out))):this.onData(o.shrinkBuf(i.output,i.next_out)))}while((0<i.avail_in||0===i.avail_out)&&1!==r);return 4===n?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==n||(this.onEnd(l),!(i.avail_out=0))},p.prototype.onData=function(e){this.chunks.push(e)},p.prototype.onEnd=function(e){e===l&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=p,r.deflate=n,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,n(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,n(e,t)}},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(e,t,r){\"use strict\";var c=e(\"./zlib/inflate\"),d=e(\"./utils/common\"),p=e(\"./utils/strings\"),m=e(\"./zlib/constants\"),n=e(\"./zlib/messages\"),i=e(\"./zlib/zstream\"),s=e(\"./zlib/gzheader\"),_=Object.prototype.toString;function a(e){if(!(this instanceof a))return new a(e);this.options=d.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;var r=c.inflateInit2(this.strm,t.windowBits);if(r!==m.Z_OK)throw new Error(n[r]);this.header=new s,c.inflateGetHeader(this.strm,this.header)}function o(e,t){var r=new a(t);if(r.push(e,!0),r.err)throw r.msg||n[r.err];return r.result}a.prototype.push=function(e,t){var r,n,i,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?m.Z_FINISH:m.Z_NO_FLUSH,\"string\"==typeof e?h.input=p.binstring2buf(e):\"[object ArrayBuffer]\"===_.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new d.Buf8(u),h.next_out=0,h.avail_out=u),(r=c.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o=\"string\"==typeof l?p.string2buf(l):\"[object ArrayBuffer]\"===_.call(l)?new Uint8Array(l):l,r=c.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||n!==m.Z_FINISH&&n!==m.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(i=p.utf8border(h.output,h.next_out),s=h.next_out-i,a=p.buf2string(h.output,i),h.next_out=s,h.avail_out=u-s,s&&d.arraySet(h.output,h.output,i,s,0),this.onData(a)):this.onData(d.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(n=m.Z_FINISH),n===m.Z_FINISH?(r=c.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):n!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(e){this.chunks.push(e)},a.prototype.onEnd=function(e){e===m.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=d.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,o(e,t)},r.ungzip=o},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){var t,r,n,i,s,a;for(t=n=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),t=i=0,r=e.length;t<r;t++)s=e[t],a.set(s,i),i+=s.length;return a}},s={arraySet:function(e,t,r,n,i){for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(n)},{}],42:[function(e,t,r){\"use strict\";var h=e(\"./common\"),i=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(e){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){s=!1}for(var u=new h.Buf8(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function l(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&i))return String.fromCharCode.apply(null,h.shrinkBuf(e,t));for(var r=\"\",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}u[254]=u[254]=1,r.string2buf=function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new h.Buf8(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,i,s,a=t||e.length,o=new Array(2*a);for(r=n=0;r<a;)if((i=e[r++])<128)o[n++]=i;else if(4<(s=u[i]))o[n++]=65533,r+=s-1;else{for(i&=2===s?31:3===s?15:7;1<s&&r<a;)i=i<<6|63&e[r++],s--;1<s?o[n++]=65533:i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(i=i+t[n++]|0)|0,--a;);i%=65521,s%=65521}return i|s<<16|0}},{}],44:[function(e,t,r){\"use strict\";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(e,t,r){\"use strict\";var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4<e?9:0)}function D(e){for(var t=e.length;0<=--t;)e[t]=0}function F(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<c);if(n=S-(c-s),s=c-S,a<n){if(e.match_start=t,o<=(a=n))break;d=u[s+a-1],p=u[s+a]}}}while((t=f[t&l])>h&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,c.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=d(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),e.lookahead+=r,e.lookahead+e.insert>=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+x-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<x)););}while(e.lookahead<z&&0!==e.strm.avail_in)}function Z(e,t){for(var r,n;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r)),e.match_length>=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart,0!=--e.match_length;);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function W(e,t){for(var r,n,i;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=x-1,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r),e.match_length<=5&&(1===e.strategy||e.match_length===x&&4096<e.strstart-e.match_start)&&(e.match_length=x-1)),e.prev_length>=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!=--e.prev_length;);if(e.match_available=0,e.match_length=x-1,e.strstart++,n&&(N(e,!1),0===e.strm.avail_out))return A}else if(e.match_available){if((n=u._tr_tally(e,0,e.window[e.strstart-1]))&&N(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return A}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=u._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function M(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new c.Buf16(2*w),this.dyn_dtree=new c.Buf16(2*(2*a+1)),this.bl_tree=new c.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new c.Buf16(k+1),this.heap=new c.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new c.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=i,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?C:E,e.adler=2===t.wrap?0:1,t.last_flush=l,u._tr_init(t),m):R(e,_)}function K(e){var t=G(e);return t===m&&function(e){e.window_size=2*e.w_size,D(e.head),e.max_lazy_match=h[e.level].max_lazy,e.good_match=h[e.level].good_length,e.nice_match=h[e.level].nice_length,e.max_chain_length=h[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=x-1,e.match_available=0,e.ins_h=0}(e.state),t}function Y(e,t,r,n,i,s){if(!e)return _;var a=1;if(t===g&&(t=6),n<0?(a=0,n=-n):15<n&&(a=2,n-=16),i<1||y<i||r!==v||n<8||15<n||t<0||9<t||s<0||b<s)return R(e,_);8===n&&(n=9);var o=new H;return(e.state=o).strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new c.Buf8(2*o.w_size),o.head=new c.Buf16(o.hash_size),o.prev=new c.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new c.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=s,o.method=r,K(e)}h=[new M(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5<t||t<0)return e?R(e,_):_;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||666===n.status&&t!==f)return R(e,0===e.avail_out?-5:_);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===C)if(2===n.wrap)e.adler=0,U(n,31),U(n,139),U(n,8),n.gzhead?(U(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),U(n,255&n.gzhead.time),U(n,n.gzhead.time>>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.name.length?255&n.gzhead.name.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.comment.length?255&n.gzhead.comment.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0<e.strstart&&(n=a[i=e.strstart-1])===a[++i]&&n===a[++i]&&n===a[++i]){s=e.strstart+S;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);e.match_length=S-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0<n.wrap&&(n.wrap=-n.wrap),0!==n.pending?m:1)},r.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==C&&69!==t&&73!==t&&91!==t&&103!==t&&t!==E&&666!==t?R(e,_):(e.state=null,t===E?R(e,-3):m):_},r.deflateSetDictionary=function(e,t){var r,n,i,s,a,o,h,u,l=t.length;if(!e||!e.state)return _;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(e.adler=d(e.adler,t,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+x-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++,--i;);r.strstart=n,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,e.next_in=o,e.input=h,e.avail_in=a,r.wrap=s,m},r.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(e,t,r){\"use strict\";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],48:[function(e,t,r){\"use strict\";t.exports=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C;r=e.state,n=e.next_in,z=e.input,i=n+(e.avail_in-5),s=e.next_out,C=e.output,a=s-(t-e.avail_out),o=s+(e.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,c=r.window,d=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=m[d&g];t:for(;;){if(d>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<<y)-1)];continue t}if(32&y){r.mode=12;break e}e.msg=\"invalid literal/length code\",r.mode=30;break e}w=65535&v,(y&=15)&&(p<y&&(d+=z[n++]<<p,p+=8),w+=d&(1<<y)-1,d>>>=y,p-=y),p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=_[d&b];r:for(;;){if(d>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<<y)-1)];continue r}e.msg=\"invalid distance code\",r.mode=30;break e}if(k=65535&v,p<(y&=15)&&(d+=z[n++]<<p,(p+=8)<y&&(d+=z[n++]<<p,p+=8)),h<(k+=d&(1<<y)-1)){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(d>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(S=c,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=c[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=c[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(n<i&&s<o);n-=w=p>>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?i-n+5:5-(n-i),e.avail_out=s<o?o-s+257:257-(s-o),r.hold=d,r.bits=p}},{}],49:[function(e,t,r){\"use strict\";var I=e(\"../utils/common\"),O=e(\"./adler32\"),B=e(\"./crc32\"),R=e(\"./inffast\"),T=e(\"./inftrees\"),D=1,F=2,N=0,U=-2,P=1,n=852,i=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?U:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,o(e))):U}function u(e,t){var r,n;return e?(n=new s,(e.state=n).window=null,(r=h(e,t))!==N&&(e.state=null),r):U}var l,f,c=!0;function j(e){if(c){var t;for(l=new I.Buf32(512),f=new I.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(T(D,e.lens,0,288,l,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;T(F,e.lens,0,32,f,0,e.work,{bits:5}),c=!1}e.lencode=l,e.lenbits=9,e.distcode=f,e.distbits=5}function Z(e,t,r,n){var i,s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),n>=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(e){return u(e,15)},r.inflateInit2=u,r.inflate=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return U;12===(r=e.state).mode&&(r.mode=13),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,f=o,c=h,x=N;e:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){e.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}e.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o<d&&(d=o),h<d&&(d=h),0===d)break e;I.arraySet(i,n,s,d,a),o-=d,s+=d,h-=d,a+=d,r.length-=d;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){e.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(h<d&&(d=h),h-=d,r.length-=d;i[a++]=m[p++],--d;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break e;i[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break e;o--,u|=n[s++]<<l,l+=8}if(c-=h,e.total_out+=c,r.total+=c,c&&(e.adler=r.check=r.flags?B(r.check,i,c,a-c):O(r.check,i,c,a-c)),c=h,(r.flags?u:L(u))!==r.check){e.msg=\"incorrect data check\",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break e;case 30:x=-3;break e;case 31:return-4;case 32:default:return U}return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,(r.wsize||c!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&Z(e,e.output,e.next_out,c-e.avail_out)?(r.mode=31,-4):(f-=e.avail_in,c-=e.avail_out,e.total_in+=f,e.total_out+=c,r.total+=c,r.wrap&&c&&(e.adler=r.check=r.flags?B(r.check,i,c,e.next_out-c):O(r.check,i,c,e.next_out-c)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===c||4===t)&&x===N&&(x=-5),x)},r.inflateEnd=function(e){if(!e||!e.state)return U;var t=e.state;return t.window&&(t.window=null),e.state=null,N},r.inflateGetHeader=function(e,t){var r;return e&&e.state?0==(2&(r=e.state).wrap)?U:((r.head=t).done=!1,N):U},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,t,n,0)!==r.check?-3:Z(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(e,t,r){\"use strict\";var D=e(\"../utils/common\"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,r,n,i,s,a,o){var h,u,l,f,c,d,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<n;v++)O[t[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return i[s++]=20971520,i[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===e||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<n;v++)0!==t[r+v]&&(a[B[t[r+v]]++]=v);if(d=0===e?(A=R=a,19):1===e?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,c=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===e&&852<C||2===e&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<d?(m=0,a[v]):a[v]>d?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;i[c+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),c+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===e&&852<C||2===e&&592<C)return 1;i[l=E&f]=k<<24|x<<16|c-s|0}}return 0!==E&&(i[c+E]=b-S<<24|64<<16|0),o.bits=k,0}},{\"../utils/common\":41}],51:[function(e,t,r){\"use strict\";t.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],52:[function(e,t,r){\"use strict\";var i=e(\"../utils/common\"),o=0,h=1;function n(e){for(var t=e.length;0<=--t;)e[t]=0}var s=0,a=29,u=256,l=u+1+a,f=30,c=19,_=2*l+1,g=15,d=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));n(z);var C=new Array(2*f);n(C);var E=new Array(512);n(E);var A=new Array(256);n(A);var I=new Array(a);n(I);var O,B,R,T=new Array(f);function D(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function F(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function N(e){return e<256?E[e]:E[256+(e>>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<<e.bi_valid&65535,U(e,e.bi_buf),e.bi_buf=t>>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function L(e,t,r){P(e,r[2*t],r[2*t+1])}function j(e,t){for(var r=0;r|=1&e,e>>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t<l;t++)e.dyn_ltree[2*t]=0;for(t=0;t<f;t++)e.dyn_dtree[2*t]=0;for(t=0;t<c;t++)e.bl_tree[2*t]=0;e.dyn_ltree[2*m]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function M(e){8<e.bi_valid?U(e,e.bi_buf):0<e.bi_valid&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function H(e,t,r,n){var i=2*t,s=2*r;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]}function G(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&H(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!H(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function K(e,t,r){var n,i,s,a,o=0;if(0!==e.last_lit)for(;n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?L(e,i,t):(L(e,(s=A[i])+u+1,t),0!==(a=w[s])&&P(e,i-=I[s],a),L(e,s=N(--n),r),0!==(a=k[s])&&P(e,n-=T[s],a)),o<e.last_lit;);L(e,m,t)}function Y(e,t){var r,n,i,s=t.dyn_tree,a=t.stat_desc.static_tree,o=t.stat_desc.has_stree,h=t.stat_desc.elems,u=-1;for(e.heap_len=0,e.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(e.heap[++e.heap_len]=u=r,e.depth[r]=0):s[2*r+1]=0;for(;e.heap_len<2;)s[2*(i=e.heap[++e.heap_len]=u<2?++u:0)]=1,e.depth[i]=0,e.opt_len--,o&&(e.static_len-=a[2*i+1]);for(t.max_code=u,r=e.heap_len>>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u<n||(e.bl_count[s]++,a=0,d<=n&&(a=c[n-d]),o=h[2*n],e.opt_len+=o*(s+a),f&&(e.static_len+=o*(l[2*n+1]+a)));if(0!==m){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(n=e.bl_count[s];0!==n;)u<(i=e.heap[--r])||(h[2*i+1]!==s&&(e.opt_len+=(s-h[2*i+1])*h[2*i],h[2*i+1]=s),n--)}}(e,t),Z(s,u,e.bl_count)}function X(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o<h&&i===a||(o<u?e.bl_tree[2*i]+=o:0!==i?(i!==s&&e.bl_tree[2*i]++,e.bl_tree[2*b]++):o<=10?e.bl_tree[2*v]++:e.bl_tree[2*y]++,s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4))}function V(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o<h&&i===a)){if(o<u)for(;L(e,i,e.bl_tree),0!=--o;);else 0!==i?(i!==s&&(L(e,i,e.bl_tree),o--),L(e,b,e.bl_tree),P(e,o-3,2)):o<=10?(L(e,v,e.bl_tree),P(e,o-3,3)):(L(e,y,e.bl_tree),P(e,o-11,7));s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4)}}n(T);var q=!1;function J(e,t,r,n){P(e,(s<<1)+(n?1:0),3),function(e,t,r,n){M(e),n&&(U(e,r),U(e,~r)),i.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}r._tr_init=function(e){q||(function(){var e,t,r,n,i,s=new Array(g+1);for(n=r=0;n<a-1;n++)for(I[n]=r,e=0;e<1<<w[n];e++)A[r++]=n;for(A[r-1]=n,n=i=0;n<16;n++)for(T[n]=i,e=0;e<1<<k[n];e++)E[i++]=n;for(i>>=7;n<f;n++)for(T[n]=i<<7,e=0;e<1<<k[n]-7;e++)E[256+i++]=n;for(t=0;t<=g;t++)s[t]=0;for(e=0;e<=143;)z[2*e+1]=8,e++,s[8]++;for(;e<=255;)z[2*e+1]=9,e++,s[9]++;for(;e<=279;)z[2*e+1]=7,e++,s[7]++;for(;e<=287;)z[2*e+1]=8,e++,s[8]++;for(Z(z,l+1,s),e=0;e<f;e++)C[2*e+1]=5,C[2*e]=j(e,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,c,p)}(),q=!0),e.l_desc=new F(e.dyn_ltree,O),e.d_desc=new F(e.dyn_dtree,B),e.bl_desc=new F(e.bl_tree,R),e.bi_buf=0,e.bi_valid=0,W(e)},r._tr_stored_block=J,r._tr_flush_block=function(e,t,r,n){var i,s,a=0;0<e.level?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t<u;t++)if(0!==e.dyn_ltree[2*t])return h;return o}(e)),Y(e,e.l_desc),Y(e,e.d_desc),a=function(e){var t;for(X(e,e.dyn_ltree,e.l_desc.max_code),X(e,e.dyn_dtree,e.d_desc.max_code),Y(e,e.bl_desc),t=c-1;3<=t&&0===e.bl_tree[2*S[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i<n;i++)P(e,e.bl_tree[2*S[i]+1],3);V(e,e.dyn_ltree,t-1),V(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),K(e,e.dyn_ltree,e.dyn_dtree)),W(e),n&&M(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r<t.length;r++)t[r]=arguments[r+1];var n={callback:e,args:t};return h[o]=n,i(o),o++},e.clearImmediate=f}function f(e){delete h[e]}function c(e){if(u)setTimeout(c,0,e);else{var t=h[e];if(t){u=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}(t)}finally{f(e),u=!1}}}}function d(e){e.source===r&&\"string\"==typeof e.data&&0===e.data.indexOf(a)&&c(+e.data.slice(a.length))}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}]},{},[10])(10)});","export const defaultMessages = 'End-Of-Stream';\n/**\n * Thrown on read operation of the end of file or stream has been reached\n */\nexport class EndOfStreamError extends Error {\n    constructor() {\n        super(defaultMessages);\n        this.name = \"EndOfStreamError\";\n    }\n}\nexport class AbortError extends Error {\n    constructor(message = \"The operation was aborted\") {\n        super(message);\n        this.name = \"AbortError\";\n    }\n}\n","import { EndOfStreamError, AbortError } from \"./Errors.js\";\nexport class AbstractStreamReader {\n    constructor() {\n        this.endOfStream = false;\n        this.interrupted = false;\n        /**\n         * Store peeked data\n         * @type {Array}\n         */\n        this.peekQueue = [];\n    }\n    async peek(uint8Array, mayBeLess = false) {\n        const bytesRead = await this.read(uint8Array, mayBeLess);\n        this.peekQueue.push(uint8Array.subarray(0, bytesRead)); // Put read data back to peek buffer\n        return bytesRead;\n    }\n    async read(buffer, mayBeLess = false) {\n        if (buffer.length === 0) {\n            return 0;\n        }\n        let bytesRead = this.readFromPeekBuffer(buffer);\n        if (!this.endOfStream) {\n            bytesRead += await this.readRemainderFromStream(buffer.subarray(bytesRead), mayBeLess);\n        }\n        if (bytesRead === 0 && !mayBeLess) {\n            throw new EndOfStreamError();\n        }\n        return bytesRead;\n    }\n    /**\n     * Read chunk from stream\n     * @param buffer - Target Uint8Array (or Buffer) to store data read from stream in\n     * @returns Number of bytes read\n     */\n    readFromPeekBuffer(buffer) {\n        let remaining = buffer.length;\n        let bytesRead = 0;\n        // consume peeked data first\n        while (this.peekQueue.length > 0 && remaining > 0) {\n            const peekData = this.peekQueue.pop(); // Front of queue\n            if (!peekData)\n                throw new Error('peekData should be defined');\n            const lenCopy = Math.min(peekData.length, remaining);\n            buffer.set(peekData.subarray(0, lenCopy), bytesRead);\n            bytesRead += lenCopy;\n            remaining -= lenCopy;\n            if (lenCopy < peekData.length) {\n                // remainder back to queue\n                this.peekQueue.push(peekData.subarray(lenCopy));\n            }\n        }\n        return bytesRead;\n    }\n    async readRemainderFromStream(buffer, mayBeLess) {\n        let bytesRead = 0;\n        // Continue reading from stream if required\n        while (bytesRead < buffer.length && !this.endOfStream) {\n            if (this.interrupted) {\n                throw new AbortError();\n            }\n            const chunkLen = await this.readFromStream(buffer.subarray(bytesRead), mayBeLess);\n            if (chunkLen === 0)\n                break;\n            bytesRead += chunkLen;\n        }\n        if (!mayBeLess && bytesRead < buffer.length) {\n            throw new EndOfStreamError();\n        }\n        return bytesRead;\n    }\n}\n","import { AbstractStreamReader } from \"./AbstractStreamReader.js\";\nexport class WebStreamReader extends AbstractStreamReader {\n    constructor(reader) {\n        super();\n        this.reader = reader;\n    }\n    async abort() {\n        return this.close();\n    }\n    async close() {\n        this.reader.releaseLock();\n    }\n}\n","import { WebStreamReader } from './WebStreamReader.js';\n/**\n * Read from a WebStream using a BYOB reader\n * Reference: https://nodejs.org/api/webstreams.html#class-readablestreambyobreader\n */\nexport class WebStreamByobReader extends WebStreamReader {\n    /**\n     * Read from stream\n     * @param buffer - Target Uint8Array (or Buffer) to store data read from stream in\n     * @param mayBeLess - If true, may fill the buffer partially\n     * @protected Bytes read\n     */\n    async readFromStream(buffer, mayBeLess) {\n        if (buffer.length === 0)\n            return 0;\n        // @ts-ignore\n        const result = await this.reader.read(new Uint8Array(buffer.length), { min: mayBeLess ? undefined : buffer.length });\n        if (result.done) {\n            this.endOfStream = result.done;\n        }\n        if (result.value) {\n            buffer.set(result.value);\n            return result.value.length;\n        }\n        return 0;\n    }\n}\n","import { EndOfStreamError } from './Errors.js';\nimport { AbstractStreamReader } from \"./AbstractStreamReader.js\";\nexport class WebStreamDefaultReader extends AbstractStreamReader {\n    constructor(reader) {\n        super();\n        this.reader = reader;\n        this.buffer = null; // Internal buffer to store excess data\n    }\n    /**\n     * Copy chunk to target, and store the remainder in this.buffer\n     */\n    writeChunk(target, chunk) {\n        const written = Math.min(chunk.length, target.length);\n        target.set(chunk.subarray(0, written));\n        // Adjust the remainder of the buffer\n        if (written < chunk.length) {\n            this.buffer = chunk.subarray(written);\n        }\n        else {\n            this.buffer = null;\n        }\n        return written;\n    }\n    /**\n     * Read from stream\n     * @param buffer - Target Uint8Array (or Buffer) to store data read from stream in\n     * @param mayBeLess - If true, may fill the buffer partially\n     * @protected Bytes read\n     */\n    async readFromStream(buffer, mayBeLess) {\n        if (buffer.length === 0)\n            return 0;\n        let totalBytesRead = 0;\n        // Serve from the internal buffer first\n        if (this.buffer) {\n            totalBytesRead += this.writeChunk(buffer, this.buffer);\n        }\n        // Continue reading from the stream if more data is needed\n        while (totalBytesRead < buffer.length && !this.endOfStream) {\n            const result = await this.reader.read();\n            if (result.done) {\n                this.endOfStream = true;\n                break;\n            }\n            if (result.value) {\n                totalBytesRead += this.writeChunk(buffer.subarray(totalBytesRead), result.value);\n            }\n        }\n        if (!mayBeLess && totalBytesRead === 0 && this.endOfStream) {\n            throw new EndOfStreamError();\n        }\n        return totalBytesRead;\n    }\n    abort() {\n        this.interrupted = true;\n        return this.reader.cancel();\n    }\n    async close() {\n        await this.abort();\n        this.reader.releaseLock();\n    }\n}\n","import { EndOfStreamError } from './stream/index.js';\n/**\n * Core tokenizer\n */\nexport class AbstractTokenizer {\n    /**\n     * Constructor\n     * @param options Tokenizer options\n     * @protected\n     */\n    constructor(options) {\n        this.numBuffer = new Uint8Array(8);\n        /**\n         * Tokenizer-stream position\n         */\n        this.position = 0;\n        this.onClose = options?.onClose;\n        if (options?.abortSignal) {\n            options.abortSignal.addEventListener('abort', () => {\n                this.abort();\n            });\n        }\n    }\n    /**\n     * Read a token from the tokenizer-stream\n     * @param token - The token to read\n     * @param position - If provided, the desired position in the tokenizer-stream\n     * @returns Promise with token data\n     */\n    async readToken(token, position = this.position) {\n        const uint8Array = new Uint8Array(token.len);\n        const len = await this.readBuffer(uint8Array, { position });\n        if (len < token.len)\n            throw new EndOfStreamError();\n        return token.get(uint8Array, 0);\n    }\n    /**\n     * Peek a token from the tokenizer-stream.\n     * @param token - Token to peek from the tokenizer-stream.\n     * @param position - Offset where to begin reading within the file. If position is null, data will be read from the current file position.\n     * @returns Promise with token data\n     */\n    async peekToken(token, position = this.position) {\n        const uint8Array = new Uint8Array(token.len);\n        const len = await this.peekBuffer(uint8Array, { position });\n        if (len < token.len)\n            throw new EndOfStreamError();\n        return token.get(uint8Array, 0);\n    }\n    /**\n     * Read a numeric token from the stream\n     * @param token - Numeric token\n     * @returns Promise with number\n     */\n    async readNumber(token) {\n        const len = await this.readBuffer(this.numBuffer, { length: token.len });\n        if (len < token.len)\n            throw new EndOfStreamError();\n        return token.get(this.numBuffer, 0);\n    }\n    /**\n     * Read a numeric token from the stream\n     * @param token - Numeric token\n     * @returns Promise with number\n     */\n    async peekNumber(token) {\n        const len = await this.peekBuffer(this.numBuffer, { length: token.len });\n        if (len < token.len)\n            throw new EndOfStreamError();\n        return token.get(this.numBuffer, 0);\n    }\n    /**\n     * Ignore number of bytes, advances the pointer in under tokenizer-stream.\n     * @param length - Number of bytes to ignore\n     * @return resolves the number of bytes ignored, equals length if this available, otherwise the number of bytes available\n     */\n    async ignore(length) {\n        if (this.fileInfo.size !== undefined) {\n            const bytesLeft = this.fileInfo.size - this.position;\n            if (length > bytesLeft) {\n                this.position += bytesLeft;\n                return bytesLeft;\n            }\n        }\n        this.position += length;\n        return length;\n    }\n    async close() {\n        await this.abort();\n        await this.onClose?.();\n    }\n    normalizeOptions(uint8Array, options) {\n        if (!this.supportsRandomAccess() && options && options.position !== undefined && options.position < this.position) {\n            throw new Error('`options.position` must be equal or greater than `tokenizer.position`');\n        }\n        return {\n            ...{\n                mayBeLess: false,\n                offset: 0,\n                length: uint8Array.length,\n                position: this.position\n            }, ...options\n        };\n    }\n    abort() {\n        return Promise.resolve(); // Ignore abort signal\n    }\n}\n","import { AbstractTokenizer } from './AbstractTokenizer.js';\nimport { EndOfStreamError } from './stream/index.js';\nconst maxBufferSize = 256000;\nexport class ReadStreamTokenizer extends AbstractTokenizer {\n    /**\n     * Constructor\n     * @param streamReader stream-reader to read from\n     * @param options Tokenizer options\n     */\n    constructor(streamReader, options) {\n        super(options);\n        this.streamReader = streamReader;\n        this.fileInfo = options?.fileInfo ?? {};\n    }\n    /**\n     * Read buffer from tokenizer\n     * @param uint8Array - Target Uint8Array to fill with data read from the tokenizer-stream\n     * @param options - Read behaviour options\n     * @returns Promise with number of bytes read\n     */\n    async readBuffer(uint8Array, options) {\n        const normOptions = this.normalizeOptions(uint8Array, options);\n        const skipBytes = normOptions.position - this.position;\n        if (skipBytes > 0) {\n            await this.ignore(skipBytes);\n            return this.readBuffer(uint8Array, options);\n        }\n        if (skipBytes < 0) {\n            throw new Error('`options.position` must be equal or greater than `tokenizer.position`');\n        }\n        if (normOptions.length === 0) {\n            return 0;\n        }\n        const bytesRead = await this.streamReader.read(uint8Array.subarray(0, normOptions.length), normOptions.mayBeLess);\n        this.position += bytesRead;\n        if ((!options || !options.mayBeLess) && bytesRead < normOptions.length) {\n            throw new EndOfStreamError();\n        }\n        return bytesRead;\n    }\n    /**\n     * Peek (read ahead) buffer from tokenizer\n     * @param uint8Array - Uint8Array (or Buffer) to write data to\n     * @param options - Read behaviour options\n     * @returns Promise with number of bytes peeked\n     */\n    async peekBuffer(uint8Array, options) {\n        const normOptions = this.normalizeOptions(uint8Array, options);\n        let bytesRead = 0;\n        if (normOptions.position) {\n            const skipBytes = normOptions.position - this.position;\n            if (skipBytes > 0) {\n                const skipBuffer = new Uint8Array(normOptions.length + skipBytes);\n                bytesRead = await this.peekBuffer(skipBuffer, { mayBeLess: normOptions.mayBeLess });\n                uint8Array.set(skipBuffer.subarray(skipBytes));\n                return bytesRead - skipBytes;\n            }\n            if (skipBytes < 0) {\n                throw new Error('Cannot peek from a negative offset in a stream');\n            }\n        }\n        if (normOptions.length > 0) {\n            try {\n                bytesRead = await this.streamReader.peek(uint8Array.subarray(0, normOptions.length), normOptions.mayBeLess);\n            }\n            catch (err) {\n                if (options?.mayBeLess && err instanceof EndOfStreamError) {\n                    return 0;\n                }\n                throw err;\n            }\n            if ((!normOptions.mayBeLess) && bytesRead < normOptions.length) {\n                throw new EndOfStreamError();\n            }\n        }\n        return bytesRead;\n    }\n    async ignore(length) {\n        // debug(`ignore ${this.position}...${this.position + length - 1}`);\n        const bufSize = Math.min(maxBufferSize, length);\n        const buf = new Uint8Array(bufSize);\n        let totBytesRead = 0;\n        while (totBytesRead < length) {\n            const remaining = length - totBytesRead;\n            const bytesRead = await this.readBuffer(buf, { length: Math.min(bufSize, remaining) });\n            if (bytesRead < 0) {\n                return bytesRead;\n            }\n            totBytesRead += bytesRead;\n        }\n        return totBytesRead;\n    }\n    abort() {\n        return this.streamReader.abort();\n    }\n    async close() {\n        return this.streamReader.close();\n    }\n    supportsRandomAccess() {\n        return false;\n    }\n}\n","import { EndOfStreamError } from './stream/index.js';\nimport { AbstractTokenizer } from './AbstractTokenizer.js';\nexport class BufferTokenizer extends AbstractTokenizer {\n    /**\n     * Construct BufferTokenizer\n     * @param uint8Array - Uint8Array to tokenize\n     * @param options Tokenizer options\n     */\n    constructor(uint8Array, options) {\n        super(options);\n        this.uint8Array = uint8Array;\n        this.fileInfo = { ...options?.fileInfo ?? {}, ...{ size: uint8Array.length } };\n    }\n    /**\n     * Read buffer from tokenizer\n     * @param uint8Array - Uint8Array to tokenize\n     * @param options - Read behaviour options\n     * @returns {Promise<number>}\n     */\n    async readBuffer(uint8Array, options) {\n        if (options?.position) {\n            this.position = options.position;\n        }\n        const bytesRead = await this.peekBuffer(uint8Array, options);\n        this.position += bytesRead;\n        return bytesRead;\n    }\n    /**\n     * Peek (read ahead) buffer from tokenizer\n     * @param uint8Array\n     * @param options - Read behaviour options\n     * @returns {Promise<number>}\n     */\n    async peekBuffer(uint8Array, options) {\n        const normOptions = this.normalizeOptions(uint8Array, options);\n        const bytes2read = Math.min(this.uint8Array.length - normOptions.position, normOptions.length);\n        if ((!normOptions.mayBeLess) && bytes2read < normOptions.length) {\n            throw new EndOfStreamError();\n        }\n        uint8Array.set(this.uint8Array.subarray(normOptions.position, normOptions.position + bytes2read));\n        return bytes2read;\n    }\n    close() {\n        return super.close();\n    }\n    supportsRandomAccess() {\n        return true;\n    }\n    setPosition(position) {\n        this.position = position;\n    }\n}\n","import { StreamReader, makeWebStreamReader } from './stream/index.js';\nimport { ReadStreamTokenizer } from './ReadStreamTokenizer.js';\nimport { BufferTokenizer } from './BufferTokenizer.js';\nimport { BlobTokenizer } from './BlobTokenizer.js';\nexport { EndOfStreamError, AbortError } from './stream/index.js';\nexport { AbstractTokenizer } from './AbstractTokenizer.js';\n/**\n * Construct ReadStreamTokenizer from given Stream.\n * Will set fileSize, if provided given Stream has set the .path property/\n * @param stream - Read from Node.js Stream.Readable\n * @param options - Tokenizer options\n * @returns ReadStreamTokenizer\n */\nexport function fromStream(stream, options) {\n    const streamReader = new StreamReader(stream);\n    const _options = options ?? {};\n    const chainedClose = _options.onClose;\n    _options.onClose = async () => {\n        await streamReader.close();\n        if (chainedClose) {\n            return chainedClose();\n        }\n    };\n    return new ReadStreamTokenizer(streamReader, _options);\n}\n/**\n * Construct ReadStreamTokenizer from given ReadableStream (WebStream API).\n * Will set fileSize, if provided given Stream has set the .path property/\n * @param webStream - Read from Node.js Stream.Readable (must be a byte stream)\n * @param options - Tokenizer options\n * @returns ReadStreamTokenizer\n */\nexport function fromWebStream(webStream, options) {\n    const webStreamReader = makeWebStreamReader(webStream);\n    const _options = options ?? {};\n    const chainedClose = _options.onClose;\n    _options.onClose = async () => {\n        await webStreamReader.close();\n        if (chainedClose) {\n            return chainedClose();\n        }\n    };\n    return new ReadStreamTokenizer(webStreamReader, _options);\n}\n/**\n * Construct ReadStreamTokenizer from given Buffer.\n * @param uint8Array - Uint8Array to tokenize\n * @param options - Tokenizer options\n * @returns BufferTokenizer\n */\nexport function fromBuffer(uint8Array, options) {\n    return new BufferTokenizer(uint8Array, options);\n}\n/**\n * Construct ReadStreamTokenizer from given Blob.\n * @param blob - Uint8Array to tokenize\n * @param options - Tokenizer options\n * @returns BufferTokenizer\n */\nexport function fromBlob(blob, options) {\n    return new BlobTokenizer(blob, options);\n}\n","import { WebStreamByobReader } from './WebStreamByobReader.js';\nimport { WebStreamDefaultReader } from './WebStreamDefaultReader.js';\nexport function makeWebStreamReader(stream) {\n    try {\n        const reader = stream.getReader({ mode: \"byob\" });\n        if (reader instanceof ReadableStreamDefaultReader) {\n            // Fallback to default reader in case `mode: byob` is ignored\n            return new WebStreamDefaultReader(reader);\n        }\n        return new WebStreamByobReader(reader);\n    }\n    catch (error) {\n        if (error instanceof TypeError) {\n            // Fallback to default reader in case `mode: byob` rejected by a `TypeError`\n            return new WebStreamDefaultReader(stream.getReader());\n        }\n        throw error;\n    }\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","import * as ieee754 from 'ieee754';\n// Primitive types\nfunction dv(array) {\n    return new DataView(array.buffer, array.byteOffset);\n}\n/**\n * 8-bit unsigned integer\n */\nexport const UINT8 = {\n    len: 1,\n    get(array, offset) {\n        return dv(array).getUint8(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setUint8(offset, value);\n        return offset + 1;\n    }\n};\n/**\n * 16-bit unsigned integer, Little Endian byte order\n */\nexport const UINT16_LE = {\n    len: 2,\n    get(array, offset) {\n        return dv(array).getUint16(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setUint16(offset, value, true);\n        return offset + 2;\n    }\n};\n/**\n * 16-bit unsigned integer, Big Endian byte order\n */\nexport const UINT16_BE = {\n    len: 2,\n    get(array, offset) {\n        return dv(array).getUint16(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setUint16(offset, value);\n        return offset + 2;\n    }\n};\n/**\n * 24-bit unsigned integer, Little Endian byte order\n */\nexport const UINT24_LE = {\n    len: 3,\n    get(array, offset) {\n        const dataView = dv(array);\n        return dataView.getUint8(offset) + (dataView.getUint16(offset + 1, true) << 8);\n    },\n    put(array, offset, value) {\n        const dataView = dv(array);\n        dataView.setUint8(offset, value & 0xff);\n        dataView.setUint16(offset + 1, value >> 8, true);\n        return offset + 3;\n    }\n};\n/**\n * 24-bit unsigned integer, Big Endian byte order\n */\nexport const UINT24_BE = {\n    len: 3,\n    get(array, offset) {\n        const dataView = dv(array);\n        return (dataView.getUint16(offset) << 8) + dataView.getUint8(offset + 2);\n    },\n    put(array, offset, value) {\n        const dataView = dv(array);\n        dataView.setUint16(offset, value >> 8);\n        dataView.setUint8(offset + 2, value & 0xff);\n        return offset + 3;\n    }\n};\n/**\n * 32-bit unsigned integer, Little Endian byte order\n */\nexport const UINT32_LE = {\n    len: 4,\n    get(array, offset) {\n        return dv(array).getUint32(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setUint32(offset, value, true);\n        return offset + 4;\n    }\n};\n/**\n * 32-bit unsigned integer, Big Endian byte order\n */\nexport const UINT32_BE = {\n    len: 4,\n    get(array, offset) {\n        return dv(array).getUint32(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setUint32(offset, value);\n        return offset + 4;\n    }\n};\n/**\n * 8-bit signed integer\n */\nexport const INT8 = {\n    len: 1,\n    get(array, offset) {\n        return dv(array).getInt8(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setInt8(offset, value);\n        return offset + 1;\n    }\n};\n/**\n * 16-bit signed integer, Big Endian byte order\n */\nexport const INT16_BE = {\n    len: 2,\n    get(array, offset) {\n        return dv(array).getInt16(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setInt16(offset, value);\n        return offset + 2;\n    }\n};\n/**\n * 16-bit signed integer, Little Endian byte order\n */\nexport const INT16_LE = {\n    len: 2,\n    get(array, offset) {\n        return dv(array).getInt16(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setInt16(offset, value, true);\n        return offset + 2;\n    }\n};\n/**\n * 24-bit signed integer, Little Endian byte order\n */\nexport const INT24_LE = {\n    len: 3,\n    get(array, offset) {\n        const unsigned = UINT24_LE.get(array, offset);\n        return unsigned > 0x7fffff ? unsigned - 0x1000000 : unsigned;\n    },\n    put(array, offset, value) {\n        const dataView = dv(array);\n        dataView.setUint8(offset, value & 0xff);\n        dataView.setUint16(offset + 1, value >> 8, true);\n        return offset + 3;\n    }\n};\n/**\n * 24-bit signed integer, Big Endian byte order\n */\nexport const INT24_BE = {\n    len: 3,\n    get(array, offset) {\n        const unsigned = UINT24_BE.get(array, offset);\n        return unsigned > 0x7fffff ? unsigned - 0x1000000 : unsigned;\n    },\n    put(array, offset, value) {\n        const dataView = dv(array);\n        dataView.setUint16(offset, value >> 8);\n        dataView.setUint8(offset + 2, value & 0xff);\n        return offset + 3;\n    }\n};\n/**\n * 32-bit signed integer, Big Endian byte order\n */\nexport const INT32_BE = {\n    len: 4,\n    get(array, offset) {\n        return dv(array).getInt32(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setInt32(offset, value);\n        return offset + 4;\n    }\n};\n/**\n * 32-bit signed integer, Big Endian byte order\n */\nexport const INT32_LE = {\n    len: 4,\n    get(array, offset) {\n        return dv(array).getInt32(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setInt32(offset, value, true);\n        return offset + 4;\n    }\n};\n/**\n * 64-bit unsigned integer, Little Endian byte order\n */\nexport const UINT64_LE = {\n    len: 8,\n    get(array, offset) {\n        return dv(array).getBigUint64(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setBigUint64(offset, value, true);\n        return offset + 8;\n    }\n};\n/**\n * 64-bit signed integer, Little Endian byte order\n */\nexport const INT64_LE = {\n    len: 8,\n    get(array, offset) {\n        return dv(array).getBigInt64(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setBigInt64(offset, value, true);\n        return offset + 8;\n    }\n};\n/**\n * 64-bit unsigned integer, Big Endian byte order\n */\nexport const UINT64_BE = {\n    len: 8,\n    get(array, offset) {\n        return dv(array).getBigUint64(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setBigUint64(offset, value);\n        return offset + 8;\n    }\n};\n/**\n * 64-bit signed integer, Big Endian byte order\n */\nexport const INT64_BE = {\n    len: 8,\n    get(array, offset) {\n        return dv(array).getBigInt64(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setBigInt64(offset, value);\n        return offset + 8;\n    }\n};\n/**\n * IEEE 754 16-bit (half precision) float, big endian\n */\nexport const Float16_BE = {\n    len: 2,\n    get(dataView, offset) {\n        return ieee754.read(dataView, offset, false, 10, this.len);\n    },\n    put(dataView, offset, value) {\n        ieee754.write(dataView, value, offset, false, 10, this.len);\n        return offset + this.len;\n    }\n};\n/**\n * IEEE 754 16-bit (half precision) float, little endian\n */\nexport const Float16_LE = {\n    len: 2,\n    get(array, offset) {\n        return ieee754.read(array, offset, true, 10, this.len);\n    },\n    put(array, offset, value) {\n        ieee754.write(array, value, offset, true, 10, this.len);\n        return offset + this.len;\n    }\n};\n/**\n * IEEE 754 32-bit (single precision) float, big endian\n */\nexport const Float32_BE = {\n    len: 4,\n    get(array, offset) {\n        return dv(array).getFloat32(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setFloat32(offset, value);\n        return offset + 4;\n    }\n};\n/**\n * IEEE 754 32-bit (single precision) float, little endian\n */\nexport const Float32_LE = {\n    len: 4,\n    get(array, offset) {\n        return dv(array).getFloat32(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setFloat32(offset, value, true);\n        return offset + 4;\n    }\n};\n/**\n * IEEE 754 64-bit (double precision) float, big endian\n */\nexport const Float64_BE = {\n    len: 8,\n    get(array, offset) {\n        return dv(array).getFloat64(offset);\n    },\n    put(array, offset, value) {\n        dv(array).setFloat64(offset, value);\n        return offset + 8;\n    }\n};\n/**\n * IEEE 754 64-bit (double precision) float, little endian\n */\nexport const Float64_LE = {\n    len: 8,\n    get(array, offset) {\n        return dv(array).getFloat64(offset, true);\n    },\n    put(array, offset, value) {\n        dv(array).setFloat64(offset, value, true);\n        return offset + 8;\n    }\n};\n/**\n * IEEE 754 80-bit (extended precision) float, big endian\n */\nexport const Float80_BE = {\n    len: 10,\n    get(array, offset) {\n        return ieee754.read(array, offset, false, 63, this.len);\n    },\n    put(array, offset, value) {\n        ieee754.write(array, value, offset, false, 63, this.len);\n        return offset + this.len;\n    }\n};\n/**\n * IEEE 754 80-bit (extended precision) float, little endian\n */\nexport const Float80_LE = {\n    len: 10,\n    get(array, offset) {\n        return ieee754.read(array, offset, true, 63, this.len);\n    },\n    put(array, offset, value) {\n        ieee754.write(array, value, offset, true, 63, this.len);\n        return offset + this.len;\n    }\n};\n/**\n * Ignore a given number of bytes\n */\nexport class IgnoreType {\n    /**\n     * @param len number of bytes to ignore\n     */\n    constructor(len) {\n        this.len = len;\n    }\n    // ToDo: don't read, but skip data\n    get(_array, _off) {\n    }\n}\nexport class Uint8ArrayType {\n    constructor(len) {\n        this.len = len;\n    }\n    get(array, offset) {\n        return array.subarray(offset, offset + this.len);\n    }\n}\n/**\n * Consume a fixed number of bytes from the stream and return a string with a specified encoding.\n * Supports all encodings supported by TextDecoder, plus 'windows-1252'.\n */\nexport class StringType {\n    constructor(len, encoding) {\n        this.len = len;\n        if (encoding && encoding.toLowerCase() === 'windows-1252') {\n            this.decoder = StringType.decodeWindows1252;\n        }\n        else {\n            const textDecoder = new TextDecoder(encoding);\n            this.decoder = (bytes) => textDecoder.decode(bytes);\n        }\n    }\n    get(data, offset = 0) {\n        const bytes = data.subarray(offset, offset + this.len);\n        return this.decoder(bytes);\n    }\n    static decodeWindows1252(bytes) {\n        let result = '';\n        for (let i = 0; i < bytes.length; i++) {\n            const byte = bytes[i];\n            result += byte < 0x80 || byte >= 0xA0\n                ? String.fromCharCode(byte)\n                : StringType.win1252Map[byte - 0x80];\n        }\n        return result;\n    }\n}\nStringType.win1252Map = '\\u20AC\\u0081\\u201A\\u0192\\u201E\\u2026\\u2020\\u2021\\u02C6\\u2030\\u0160\\u2039\\u0152\\u008D\\u017D\\u008F\\u0090\\u2018\\u2019\\u201C\\u201D\\u2022\\u2013\\u2014\\u02DC\\u2122\\u0161\\u203A\\u0153\\u009D\\u017E\\u0178';\n/**\n * ANSI Latin 1 String using Windows-1252 (Code Page 1252)\n * Windows-1252 is a superset of ISO 8859-1 / Latin-1.\n */\nexport class AnsiStringType extends StringType {\n    constructor(len) {\n        super(len, 'windows-1252');\n    }\n}\n","// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n    var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n        c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n    ], { type: 'text/javascript' }))));\n    w.onmessage = function (e) {\n        var d = e.data, ed = d.$e$;\n        if (ed) {\n            var err = new Error(ed[0]);\n            err['code'] = ed[1];\n            err.stack = ed[2];\n            cb(err, null);\n        }\n        else\n            cb(null, d);\n    };\n    w.postMessage(msg, transfer);\n    return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n    var b = new u16(31);\n    for (var i = 0; i < 31; ++i) {\n        b[i] = start += 1 << eb[i - 1];\n    }\n    // numbers here are at max 18 bits\n    var r = new i32(b[30]);\n    for (var i = 1; i < 30; ++i) {\n        for (var j = b[i]; j < b[i + 1]; ++j) {\n            r[j] = ((j - b[i]) << 5) | i;\n        }\n    }\n    return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n    // reverse table algorithm from SO\n    var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n    x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n    x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n    rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n    var s = cd.length;\n    // index\n    var i = 0;\n    // u16 \"map\": index -> # of codes with bit length = index\n    var l = new u16(mb);\n    // length of cd must be 288 (total # of codes)\n    for (; i < s; ++i) {\n        if (cd[i])\n            ++l[cd[i] - 1];\n    }\n    // u16 \"map\": index -> minimum code for bit length = index\n    var le = new u16(mb);\n    for (i = 1; i < mb; ++i) {\n        le[i] = (le[i - 1] + l[i - 1]) << 1;\n    }\n    var co;\n    if (r) {\n        // u16 \"map\": index -> number of actual bits, symbol for code\n        co = new u16(1 << mb);\n        // bits to remove for reverser\n        var rvb = 15 - mb;\n        for (i = 0; i < s; ++i) {\n            // ignore 0 lengths\n            if (cd[i]) {\n                // num encoding both symbol and bits read\n                var sv = (i << 4) | cd[i];\n                // free bits\n                var r_1 = mb - cd[i];\n                // start value\n                var v = le[cd[i] - 1]++ << r_1;\n                // m is end value\n                for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n                    // every 16 bit value starting with the code yields the same result\n                    co[rev[v] >> rvb] = sv;\n                }\n            }\n        }\n    }\n    else {\n        co = new u16(s);\n        for (i = 0; i < s; ++i) {\n            if (cd[i]) {\n                co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n            }\n        }\n    }\n    return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n    flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n    flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n    flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n    flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n    fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n    var m = a[0];\n    for (var i = 1; i < a.length; ++i) {\n        if (a[i] > m)\n            m = a[i];\n    }\n    return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n    var o = (p / 8) | 0;\n    return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n    var o = (p / 8) | 0;\n    return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n    if (s == null || s < 0)\n        s = 0;\n    if (e == null || e > v.length)\n        e = v.length;\n    // can't use .constructor in case user-supplied\n    return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexport var FlateErrorCode = {\n    UnexpectedEOF: 0,\n    InvalidBlockType: 1,\n    InvalidLengthLiteral: 2,\n    InvalidDistance: 3,\n    StreamFinished: 4,\n    NoStreamHandler: 5,\n    InvalidHeader: 6,\n    NoCallback: 7,\n    InvalidUTF8: 8,\n    ExtraFieldTooLong: 9,\n    InvalidDate: 10,\n    FilenameTooLong: 11,\n    StreamFinishing: 12,\n    InvalidZipData: 13,\n    UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n    'unexpected EOF',\n    'invalid block type',\n    'invalid length/literal',\n    'invalid distance',\n    'stream finished',\n    'no stream handler',\n    ,\n    'no callback',\n    'invalid UTF-8 data',\n    'extra field too long',\n    'date not in range 1980-2099',\n    'filename too long',\n    'stream finishing',\n    'invalid zip data'\n    // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n    var e = new Error(msg || ec[ind]);\n    e.code = ind;\n    if (Error.captureStackTrace)\n        Error.captureStackTrace(e, err);\n    if (!nt)\n        throw e;\n    return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n    // source length       dict length\n    var sl = dat.length, dl = dict ? dict.length : 0;\n    if (!sl || st.f && !st.l)\n        return buf || new u8(0);\n    var noBuf = !buf;\n    // have to estimate size\n    var resize = noBuf || st.i != 2;\n    // no state\n    var noSt = st.i;\n    // Assumes roughly 33% compression ratio average\n    if (noBuf)\n        buf = new u8(sl * 3);\n    // ensure buffer can fit at least l elements\n    var cbuf = function (l) {\n        var bl = buf.length;\n        // need to increase size to fit\n        if (l > bl) {\n            // Double or set to necessary, whichever is greater\n            var nbuf = new u8(Math.max(bl * 2, l));\n            nbuf.set(buf);\n            buf = nbuf;\n        }\n    };\n    //  last chunk         bitpos           bytes\n    var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n    // total bits\n    var tbts = sl * 8;\n    do {\n        if (!lm) {\n            // BFINAL - this is only 1 when last chunk is next\n            final = bits(dat, pos, 1);\n            // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n            var type = bits(dat, pos + 1, 3);\n            pos += 3;\n            if (!type) {\n                // go to end of byte boundary\n                var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n                if (t > sl) {\n                    if (noSt)\n                        err(0);\n                    break;\n                }\n                // ensure size\n                if (resize)\n                    cbuf(bt + l);\n                // Copy over uncompressed data\n                buf.set(dat.subarray(s, t), bt);\n                // Get new bitpos, update byte count\n                st.b = bt += l, st.p = pos = t * 8, st.f = final;\n                continue;\n            }\n            else if (type == 1)\n                lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n            else if (type == 2) {\n                //  literal                            lengths\n                var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n                var tl = hLit + bits(dat, pos + 5, 31) + 1;\n                pos += 14;\n                // length+distance tree\n                var ldt = new u8(tl);\n                // code length tree\n                var clt = new u8(19);\n                for (var i = 0; i < hcLen; ++i) {\n                    // use index map to get real code\n                    clt[clim[i]] = bits(dat, pos + i * 3, 7);\n                }\n                pos += hcLen * 3;\n                // code lengths bits\n                var clb = max(clt), clbmsk = (1 << clb) - 1;\n                // code lengths map\n                var clm = hMap(clt, clb, 1);\n                for (var i = 0; i < tl;) {\n                    var r = clm[bits(dat, pos, clbmsk)];\n                    // bits read\n                    pos += r & 15;\n                    // symbol\n                    var s = r >> 4;\n                    // code length to copy\n                    if (s < 16) {\n                        ldt[i++] = s;\n                    }\n                    else {\n                        //  copy   count\n                        var c = 0, n = 0;\n                        if (s == 16)\n                            n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n                        else if (s == 17)\n                            n = 3 + bits(dat, pos, 7), pos += 3;\n                        else if (s == 18)\n                            n = 11 + bits(dat, pos, 127), pos += 7;\n                        while (n--)\n                            ldt[i++] = c;\n                    }\n                }\n                //    length tree                 distance tree\n                var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n                // max length bits\n                lbt = max(lt);\n                // max dist bits\n                dbt = max(dt);\n                lm = hMap(lt, lbt, 1);\n                dm = hMap(dt, dbt, 1);\n            }\n            else\n                err(1);\n            if (pos > tbts) {\n                if (noSt)\n                    err(0);\n                break;\n            }\n        }\n        // Make sure the buffer can hold this + the largest possible addition\n        // Maximum chunk size (practically, theoretically infinite) is 2^17\n        if (resize)\n            cbuf(bt + 131072);\n        var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n        var lpos = pos;\n        for (;; lpos = pos) {\n            // bits read, code\n            var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n            pos += c & 15;\n            if (pos > tbts) {\n                if (noSt)\n                    err(0);\n                break;\n            }\n            if (!c)\n                err(2);\n            if (sym < 256)\n                buf[bt++] = sym;\n            else if (sym == 256) {\n                lpos = pos, lm = null;\n                break;\n            }\n            else {\n                var add = sym - 254;\n                // no extra bits needed if less\n                if (sym > 264) {\n                    // index\n                    var i = sym - 257, b = fleb[i];\n                    add = bits(dat, pos, (1 << b) - 1) + fl[i];\n                    pos += b;\n                }\n                // dist\n                var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n                if (!d)\n                    err(3);\n                pos += d & 15;\n                var dt = fd[dsym];\n                if (dsym > 3) {\n                    var b = fdeb[dsym];\n                    dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n                }\n                if (pos > tbts) {\n                    if (noSt)\n                        err(0);\n                    break;\n                }\n                if (resize)\n                    cbuf(bt + 131072);\n                var end = bt + add;\n                if (bt < dt) {\n                    var shift = dl - dt, dend = Math.min(dt, end);\n                    if (shift + bt < 0)\n                        err(3);\n                    for (; bt < dend; ++bt)\n                        buf[bt] = dict[shift + bt];\n                }\n                for (; bt < end; ++bt)\n                    buf[bt] = buf[bt - dt];\n            }\n        }\n        st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n        if (lm)\n            final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n    } while (!final);\n    // don't reallocate for streams or user buffers\n    return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n    v <<= p & 7;\n    var o = (p / 8) | 0;\n    d[o] |= v;\n    d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n    v <<= p & 7;\n    var o = (p / 8) | 0;\n    d[o] |= v;\n    d[o + 1] |= v >> 8;\n    d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n    // Need extra info to make a tree\n    var t = [];\n    for (var i = 0; i < d.length; ++i) {\n        if (d[i])\n            t.push({ s: i, f: d[i] });\n    }\n    var s = t.length;\n    var t2 = t.slice();\n    if (!s)\n        return { t: et, l: 0 };\n    if (s == 1) {\n        var v = new u8(t[0].s + 1);\n        v[t[0].s] = 1;\n        return { t: v, l: 1 };\n    }\n    t.sort(function (a, b) { return a.f - b.f; });\n    // after i2 reaches last ind, will be stopped\n    // freq must be greater than largest possible number of symbols\n    t.push({ s: -1, f: 25001 });\n    var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n    t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n    // efficient algorithm from UZIP.js\n    // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n    // symbols that combined have high freq, will start processing i2 (high-freq,\n    // non-composite) symbols instead\n    // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n    while (i1 != s - 1) {\n        l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n        r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n        t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n    }\n    var maxSym = t2[0].s;\n    for (var i = 1; i < s; ++i) {\n        if (t2[i].s > maxSym)\n            maxSym = t2[i].s;\n    }\n    // code lengths\n    var tr = new u16(maxSym + 1);\n    // max bits in tree\n    var mbt = ln(t[i1 - 1], tr, 0);\n    if (mbt > mb) {\n        // more algorithms from UZIP.js\n        // TODO: find out how this code works (debt)\n        //  ind    debt\n        var i = 0, dt = 0;\n        //    left            cost\n        var lft = mbt - mb, cst = 1 << lft;\n        t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n        for (; i < s; ++i) {\n            var i2_1 = t2[i].s;\n            if (tr[i2_1] > mb) {\n                dt += cst - (1 << (mbt - tr[i2_1]));\n                tr[i2_1] = mb;\n            }\n            else\n                break;\n        }\n        dt >>= lft;\n        while (dt > 0) {\n            var i2_2 = t2[i].s;\n            if (tr[i2_2] < mb)\n                dt -= 1 << (mb - tr[i2_2]++ - 1);\n            else\n                ++i;\n        }\n        for (; i >= 0 && dt; --i) {\n            var i2_3 = t2[i].s;\n            if (tr[i2_3] == mb) {\n                --tr[i2_3];\n                ++dt;\n            }\n        }\n        mbt = mb;\n    }\n    return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n    return n.s == -1\n        ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n        : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n    var s = c.length;\n    // Note that the semicolon was intentional\n    while (s && !c[--s])\n        ;\n    var cl = new u16(++s);\n    //  ind      num         streak\n    var cli = 0, cln = c[0], cls = 1;\n    var w = function (v) { cl[cli++] = v; };\n    for (var i = 1; i <= s; ++i) {\n        if (c[i] == cln && i != s)\n            ++cls;\n        else {\n            if (!cln && cls > 2) {\n                for (; cls > 138; cls -= 138)\n                    w(32754);\n                if (cls > 2) {\n                    w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n                    cls = 0;\n                }\n            }\n            else if (cls > 3) {\n                w(cln), --cls;\n                for (; cls > 6; cls -= 6)\n                    w(8304);\n                if (cls > 2)\n                    w(((cls - 3) << 5) | 8208), cls = 0;\n            }\n            while (cls--)\n                w(cln);\n            cls = 1;\n            cln = c[i];\n        }\n    }\n    return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n    var l = 0;\n    for (var i = 0; i < cl.length; ++i)\n        l += cf[i] * cl[i];\n    return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n    // no need to write 00 as type: TypedArray defaults to 0\n    var s = dat.length;\n    var o = shft(pos + 2);\n    out[o] = s & 255;\n    out[o + 1] = s >> 8;\n    out[o + 2] = out[o] ^ 255;\n    out[o + 3] = out[o + 1] ^ 255;\n    for (var i = 0; i < s; ++i)\n        out[o + i + 4] = dat[i];\n    return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n    wbits(out, p++, final);\n    ++lf[256];\n    var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n    var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n    var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n    var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n    var lcfreq = new u16(19);\n    for (var i = 0; i < lclt.length; ++i)\n        ++lcfreq[lclt[i] & 31];\n    for (var i = 0; i < lcdt.length; ++i)\n        ++lcfreq[lcdt[i] & 31];\n    var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n    var nlcc = 19;\n    for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n        ;\n    var flen = (bl + 5) << 3;\n    var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n    var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n    if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n        return wfblk(out, p, dat.subarray(bs, bs + bl));\n    var lm, ll, dm, dl;\n    wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n    if (dtlen < ftlen) {\n        lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n        var llm = hMap(lct, mlcb, 0);\n        wbits(out, p, nlc - 257);\n        wbits(out, p + 5, ndc - 1);\n        wbits(out, p + 10, nlcc - 4);\n        p += 14;\n        for (var i = 0; i < nlcc; ++i)\n            wbits(out, p + 3 * i, lct[clim[i]]);\n        p += 3 * nlcc;\n        var lcts = [lclt, lcdt];\n        for (var it = 0; it < 2; ++it) {\n            var clct = lcts[it];\n            for (var i = 0; i < clct.length; ++i) {\n                var len = clct[i] & 31;\n                wbits(out, p, llm[len]), p += lct[len];\n                if (len > 15)\n                    wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n            }\n        }\n    }\n    else {\n        lm = flm, ll = flt, dm = fdm, dl = fdt;\n    }\n    for (var i = 0; i < li; ++i) {\n        var sym = syms[i];\n        if (sym > 255) {\n            var len = (sym >> 18) & 31;\n            wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n            if (len > 7)\n                wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n            var dst = sym & 31;\n            wbits16(out, p, dm[dst]), p += dl[dst];\n            if (dst > 3)\n                wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n        }\n        else {\n            wbits16(out, p, lm[sym]), p += ll[sym];\n        }\n    }\n    wbits16(out, p, lm[256]);\n    return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n    var s = st.z || dat.length;\n    var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n    // writing to this writes to the output buffer\n    var w = o.subarray(pre, o.length - post);\n    var lst = st.l;\n    var pos = (st.r || 0) & 7;\n    if (lvl) {\n        if (pos)\n            w[0] = st.r >> 3;\n        var opt = deo[lvl - 1];\n        var n = opt >> 13, c = opt & 8191;\n        var msk_1 = (1 << plvl) - 1;\n        //    prev 2-byte val map    curr 2-byte val map\n        var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n        var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n        var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n        // 24576 is an arbitrary number of maximum symbols per block\n        // 424 buffer for last block\n        var syms = new i32(25000);\n        // length/literal freq   distance freq\n        var lf = new u16(288), df = new u16(32);\n        //  l/lcnt  exbits  index          l/lind  waitdx          blkpos\n        var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n        for (; i + 2 < s; ++i) {\n            // hash value\n            var hv = hsh(i);\n            // index mod 32768    previous index mod\n            var imod = i & 32767, pimod = head[hv];\n            prev[imod] = pimod;\n            head[hv] = imod;\n            // We always should modify head and prev, but only add symbols if\n            // this data is not yet processed (\"wait\" for wait index)\n            if (wi <= i) {\n                // bytes remaining\n                var rem = s - i;\n                if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n                    pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n                    li = lc_1 = eb = 0, bs = i;\n                    for (var j = 0; j < 286; ++j)\n                        lf[j] = 0;\n                    for (var j = 0; j < 30; ++j)\n                        df[j] = 0;\n                }\n                //  len    dist   chain\n                var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n                if (rem > 2 && hv == hsh(i - dif)) {\n                    var maxn = Math.min(n, rem) - 1;\n                    var maxd = Math.min(32767, i);\n                    // max possible length\n                    // not capped at dif because decompressors implement \"rolling\" index population\n                    var ml = Math.min(258, rem);\n                    while (dif <= maxd && --ch_1 && imod != pimod) {\n                        if (dat[i + l] == dat[i + l - dif]) {\n                            var nl = 0;\n                            for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n                                ;\n                            if (nl > l) {\n                                l = nl, d = dif;\n                                // break out early when we reach \"nice\" (we are satisfied enough)\n                                if (nl > maxn)\n                                    break;\n                                // now, find the rarest 2-byte sequence within this\n                                // length of literals and search for that instead.\n                                // Much faster than just using the start\n                                var mmd = Math.min(dif, nl - 2);\n                                var md = 0;\n                                for (var j = 0; j < mmd; ++j) {\n                                    var ti = i - dif + j & 32767;\n                                    var pti = prev[ti];\n                                    var cd = ti - pti & 32767;\n                                    if (cd > md)\n                                        md = cd, pimod = ti;\n                                }\n                            }\n                        }\n                        // check the previous match\n                        imod = pimod, pimod = prev[imod];\n                        dif += imod - pimod & 32767;\n                    }\n                }\n                // d will be nonzero only when a match was found\n                if (d) {\n                    // store both dist and len data in one int32\n                    // Make sure this is recognized as a len/dist with 28th bit (2^28)\n                    syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n                    var lin = revfl[l] & 31, din = revfd[d] & 31;\n                    eb += fleb[lin] + fdeb[din];\n                    ++lf[257 + lin];\n                    ++df[din];\n                    wi = i + l;\n                    ++lc_1;\n                }\n                else {\n                    syms[li++] = dat[i];\n                    ++lf[dat[i]];\n                }\n            }\n        }\n        for (i = Math.max(i, wi); i < s; ++i) {\n            syms[li++] = dat[i];\n            ++lf[dat[i]];\n        }\n        pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n        if (!lst) {\n            st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n            // shft(pos) now 1 less if pos & 7 != 0\n            pos -= 7;\n            st.h = head, st.p = prev, st.i = i, st.w = wi;\n        }\n    }\n    else {\n        for (var i = st.w || 0; i < s + lst; i += 65535) {\n            // end\n            var e = i + 65535;\n            if (e >= s) {\n                // write final block\n                w[(pos / 8) | 0] = lst;\n                e = s;\n            }\n            pos = wfblk(w, pos + 1, dat.subarray(i, e));\n        }\n        st.i = s;\n    }\n    return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n    var t = new Int32Array(256);\n    for (var i = 0; i < 256; ++i) {\n        var c = i, k = 9;\n        while (--k)\n            c = ((c & 1) && -306674912) ^ (c >>> 1);\n        t[i] = c;\n    }\n    return t;\n})();\n// CRC32\nvar crc = function () {\n    var c = -1;\n    return {\n        p: function (d) {\n            // closures have awful performance\n            var cr = c;\n            for (var i = 0; i < d.length; ++i)\n                cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n            c = cr;\n        },\n        d: function () { return ~c; }\n    };\n};\n// Adler32\nvar adler = function () {\n    var a = 1, b = 0;\n    return {\n        p: function (d) {\n            // closures have awful performance\n            var n = a, m = b;\n            var l = d.length | 0;\n            for (var i = 0; i != l;) {\n                var e = Math.min(i + 2655, l);\n                for (; i < e; ++i)\n                    m += n += d[i];\n                n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n            }\n            a = n, b = m;\n        },\n        d: function () {\n            a %= 65521, b %= 65521;\n            return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n        }\n    };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n    if (!st) {\n        st = { l: 1 };\n        if (opt.dictionary) {\n            var dict = opt.dictionary.subarray(-32768);\n            var newDat = new u8(dict.length + dat.length);\n            newDat.set(dict);\n            newDat.set(dat, dict.length);\n            dat = newDat;\n            st.w = dict.length;\n        }\n    }\n    return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? (st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n    var o = {};\n    for (var k in a)\n        o[k] = a[k];\n    for (var k in b)\n        o[k] = b[k];\n    return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n    var dt = fn();\n    var st = fn.toString();\n    var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n    for (var i = 0; i < dt.length; ++i) {\n        var v = dt[i], k = ks[i];\n        if (typeof v == 'function') {\n            fnStr += ';' + k + '=';\n            var st_1 = v.toString();\n            if (v.prototype) {\n                // for global objects\n                if (st_1.indexOf('[native code]') != -1) {\n                    var spInd = st_1.indexOf(' ', 8) + 1;\n                    fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n                }\n                else {\n                    fnStr += st_1;\n                    for (var t in v.prototype)\n                        fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n                }\n            }\n            else\n                fnStr += st_1;\n        }\n        else\n            td[k] = v;\n    }\n    return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n    var tl = [];\n    for (var k in v) {\n        if (v[k].buffer) {\n            tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n        }\n    }\n    return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n    if (!ch[id]) {\n        var fnStr = '', td_1 = {}, m = fns.length - 1;\n        for (var i = 0; i < m; ++i)\n            fnStr = wcln(fns[i], fnStr, td_1);\n        ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n    }\n    var td = mrg({}, ch[id].e);\n    return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n    out: o.size && new u8(o.size),\n    dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n    var w = wrkr(fns, init, id, function (err, dat) {\n        w.terminate();\n        cb(err, dat);\n    });\n    w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n    return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n    strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n    return function (ev) {\n        if (ev.data.length) {\n            strm.push(ev.data[0], ev.data[1]);\n            postMessage([ev.data[0].length]);\n        }\n        else\n            strm.flush();\n    };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, flush, ext) {\n    var t;\n    var w = wrkr(fns, init, id, function (err, dat) {\n        if (err)\n            w.terminate(), strm.ondata.call(strm, err);\n        else if (!Array.isArray(dat))\n            ext(dat);\n        else if (dat.length == 1) {\n            strm.queuedSize -= dat[0];\n            if (strm.ondrain)\n                strm.ondrain(dat[0]);\n        }\n        else {\n            if (dat[1])\n                w.terminate();\n            strm.ondata.call(strm, err, dat[0], dat[1]);\n        }\n    });\n    w.postMessage(opts);\n    strm.queuedSize = 0;\n    strm.push = function (d, f) {\n        if (!strm.ondata)\n            err(5);\n        if (t)\n            strm.ondata(err(4, 0, 1), null, !!f);\n        strm.queuedSize += d.length;\n        w.postMessage([d, t = f], [d.buffer]);\n    };\n    strm.terminate = function () { w.terminate(); };\n    if (flush) {\n        strm.flush = function () { w.postMessage([]); };\n    }\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n    for (; v; ++b)\n        d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n    var fn = o.filename;\n    c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n    if (o.mtime != 0)\n        wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n    if (fn) {\n        c[3] = 8;\n        for (var i = 0; i <= fn.length; ++i)\n            c[i + 10] = fn.charCodeAt(i);\n    }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n    if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n        err(6, 'invalid gzip data');\n    var flg = d[3];\n    var st = 10;\n    if (flg & 4)\n        st += (d[10] | d[11] << 8) + 2;\n    for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n        ;\n    return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n    var l = d.length;\n    return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n    var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n    c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n    c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n    if (o.dictionary) {\n        var h = adler();\n        h.p(o.dictionary);\n        wbytes(c, 2, h.d());\n    }\n};\n// zlib start\nvar zls = function (d, dict) {\n    if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n        err(6, 'invalid zlib data');\n    if ((d[1] >> 5 & 1) == +!dict)\n        err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n    return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n    if (typeof opts == 'function')\n        cb = opts, opts = {};\n    this.ondata = cb;\n    return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n    function Deflate(opts, cb) {\n        if (typeof opts == 'function')\n            cb = opts, opts = {};\n        this.ondata = cb;\n        this.o = opts || {};\n        this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n        // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n        // 98304 = 32768 (lookback) + 65536 (common chunk size)\n        this.b = new u8(98304);\n        if (this.o.dictionary) {\n            var dict = this.o.dictionary.subarray(-32768);\n            this.b.set(dict, 32768 - dict.length);\n            this.s.i = 32768 - dict.length;\n        }\n    }\n    Deflate.prototype.p = function (c, f) {\n        this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n    };\n    /**\n     * Pushes a chunk to be deflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Deflate.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        if (this.s.l)\n            err(4);\n        var endLen = chunk.length + this.s.z;\n        if (endLen > this.b.length) {\n            if (endLen > 2 * this.b.length - 32768) {\n                var newBuf = new u8(endLen & -32768);\n                newBuf.set(this.b.subarray(0, this.s.z));\n                this.b = newBuf;\n            }\n            var split = this.b.length - this.s.z;\n            this.b.set(chunk.subarray(0, split), this.s.z);\n            this.s.z = this.b.length;\n            this.p(this.b, false);\n            this.b.set(this.b.subarray(-32768));\n            this.b.set(chunk.subarray(split), 32768);\n            this.s.z = chunk.length - split + 32768;\n            this.s.i = 32766, this.s.w = 32768;\n        }\n        else {\n            this.b.set(chunk, this.s.z);\n            this.s.z += chunk.length;\n        }\n        this.s.l = final & 1;\n        if (this.s.z > this.s.w + 8191 || final) {\n            this.p(this.b, final || false);\n            this.s.w = this.s.i, this.s.i -= 2;\n        }\n    };\n    /**\n     * Flushes buffered uncompressed data. Useful to immediately retrieve the\n     * deflated output for small inputs.\n     */\n    Deflate.prototype.flush = function () {\n        if (!this.ondata)\n            err(5);\n        if (this.s.l)\n            err(4);\n        this.p(this.b, false);\n        this.s.w = this.s.i, this.s.i -= 2;\n    };\n    return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n    function AsyncDeflate(opts, cb) {\n        astrmify([\n            bDflt,\n            function () { return [astrm, Deflate]; }\n        ], this, StrmOpt.call(this, opts, cb), function (ev) {\n            var strm = new Deflate(ev.data);\n            onmessage = astrm(strm);\n        }, 6, 1);\n    }\n    return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bDflt,\n    ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n    return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n    function Inflate(opts, cb) {\n        // no StrmOpt here to avoid adding to workerizer\n        if (typeof opts == 'function')\n            cb = opts, opts = {};\n        this.ondata = cb;\n        var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n        this.s = { i: 0, b: dict ? dict.length : 0 };\n        this.o = new u8(32768);\n        this.p = new u8(0);\n        if (dict)\n            this.o.set(dict);\n    }\n    Inflate.prototype.e = function (c) {\n        if (!this.ondata)\n            err(5);\n        if (this.d)\n            err(4);\n        if (!this.p.length)\n            this.p = c;\n        else if (c.length) {\n            var n = new u8(this.p.length + c.length);\n            n.set(this.p), n.set(c, this.p.length), this.p = n;\n        }\n    };\n    Inflate.prototype.c = function (final) {\n        this.s.i = +(this.d = final || false);\n        var bts = this.s.b;\n        var dt = inflt(this.p, this.s, this.o);\n        this.ondata(slc(dt, bts, this.s.b), this.d);\n        this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n        this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n    };\n    /**\n     * Pushes a chunk to be inflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the final chunk\n     */\n    Inflate.prototype.push = function (chunk, final) {\n        this.e(chunk), this.c(final);\n    };\n    return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n    function AsyncInflate(opts, cb) {\n        astrmify([\n            bInflt,\n            function () { return [astrm, Inflate]; }\n        ], this, StrmOpt.call(this, opts, cb), function (ev) {\n            var strm = new Inflate(ev.data);\n            onmessage = astrm(strm);\n        }, 7, 0);\n    }\n    return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bInflt\n    ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, opts) {\n    return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n    function Gzip(opts, cb) {\n        this.c = crc();\n        this.l = 0;\n        this.v = 1;\n        Deflate.call(this, opts, cb);\n    }\n    /**\n     * Pushes a chunk to be GZIPped\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Gzip.prototype.push = function (chunk, final) {\n        this.c.p(chunk);\n        this.l += chunk.length;\n        Deflate.prototype.push.call(this, chunk, final);\n    };\n    Gzip.prototype.p = function (c, f) {\n        var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n        if (this.v)\n            gzh(raw, this.o), this.v = 0;\n        if (f)\n            wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n        this.ondata(raw, f);\n    };\n    /**\n     * Flushes buffered uncompressed data. Useful to immediately retrieve the\n     * GZIPped output for small inputs.\n     */\n    Gzip.prototype.flush = function () {\n        Deflate.prototype.flush.call(this);\n    };\n    return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n    function AsyncGzip(opts, cb) {\n        astrmify([\n            bDflt,\n            gze,\n            function () { return [astrm, Deflate, Gzip]; }\n        ], this, StrmOpt.call(this, opts, cb), function (ev) {\n            var strm = new Gzip(ev.data);\n            onmessage = astrm(strm);\n        }, 8, 1);\n    }\n    return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bDflt,\n        gze,\n        function () { return [gzipSync]; }\n    ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n    if (!opts)\n        opts = {};\n    var c = crc(), l = data.length;\n    c.p(data);\n    var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n    return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n    function Gunzip(opts, cb) {\n        this.v = 1;\n        this.r = 0;\n        Inflate.call(this, opts, cb);\n    }\n    /**\n     * Pushes a chunk to be GUNZIPped\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Gunzip.prototype.push = function (chunk, final) {\n        Inflate.prototype.e.call(this, chunk);\n        this.r += chunk.length;\n        if (this.v) {\n            var p = this.p.subarray(this.v - 1);\n            var s = p.length > 3 ? gzs(p) : 4;\n            if (s > p.length) {\n                if (!final)\n                    return;\n            }\n            else if (this.v > 1 && this.onmember) {\n                this.onmember(this.r - p.length);\n            }\n            this.p = p.subarray(s), this.v = 0;\n        }\n        // necessary to prevent TS from using the closure value\n        // This allows for workerization to function correctly\n        Inflate.prototype.c.call(this, final);\n        // process concatenated GZIP\n        if (this.s.f && !this.s.l && !final) {\n            this.v = shft(this.s.p) + 9;\n            this.s = { i: 0 };\n            this.o = new u8(0);\n            this.push(new u8(0), final);\n        }\n    };\n    return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n    function AsyncGunzip(opts, cb) {\n        var _this = this;\n        astrmify([\n            bInflt,\n            guze,\n            function () { return [astrm, Inflate, Gunzip]; }\n        ], this, StrmOpt.call(this, opts, cb), function (ev) {\n            var strm = new Gunzip(ev.data);\n            strm.onmember = function (offset) { return postMessage(offset); };\n            onmessage = astrm(strm);\n        }, 9, 0, function (offset) { return _this.onmember && _this.onmember(offset); });\n    }\n    return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bInflt,\n        guze,\n        function () { return [gunzipSync]; }\n    ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, opts) {\n    var st = gzs(data);\n    if (st + 8 > data.length)\n        err(6, 'invalid gzip data');\n    return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n    function Zlib(opts, cb) {\n        this.c = adler();\n        this.v = 1;\n        Deflate.call(this, opts, cb);\n    }\n    /**\n     * Pushes a chunk to be zlibbed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Zlib.prototype.push = function (chunk, final) {\n        this.c.p(chunk);\n        Deflate.prototype.push.call(this, chunk, final);\n    };\n    Zlib.prototype.p = function (c, f) {\n        var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n        if (this.v)\n            zlh(raw, this.o), this.v = 0;\n        if (f)\n            wbytes(raw, raw.length - 4, this.c.d());\n        this.ondata(raw, f);\n    };\n    /**\n     * Flushes buffered uncompressed data. Useful to immediately retrieve the\n     * zlibbed output for small inputs.\n     */\n    Zlib.prototype.flush = function () {\n        Deflate.prototype.flush.call(this);\n    };\n    return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n    function AsyncZlib(opts, cb) {\n        astrmify([\n            bDflt,\n            zle,\n            function () { return [astrm, Deflate, Zlib]; }\n        ], this, StrmOpt.call(this, opts, cb), function (ev) {\n            var strm = new Zlib(ev.data);\n            onmessage = astrm(strm);\n        }, 10, 1);\n    }\n    return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bDflt,\n        zle,\n        function () { return [zlibSync]; }\n    ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n    if (!opts)\n        opts = {};\n    var a = adler();\n    a.p(data);\n    var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n    return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n    function Unzlib(opts, cb) {\n        Inflate.call(this, opts, cb);\n        this.v = opts && opts.dictionary ? 2 : 1;\n    }\n    /**\n     * Pushes a chunk to be unzlibbed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Unzlib.prototype.push = function (chunk, final) {\n        Inflate.prototype.e.call(this, chunk);\n        if (this.v) {\n            if (this.p.length < 6 && !final)\n                return;\n            this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n        }\n        if (final) {\n            if (this.p.length < 4)\n                err(6, 'invalid zlib data');\n            this.p = this.p.subarray(0, -4);\n        }\n        // necessary to prevent TS from using the closure value\n        // This allows for workerization to function correctly\n        Inflate.prototype.c.call(this, final);\n    };\n    return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n    function AsyncUnzlib(opts, cb) {\n        astrmify([\n            bInflt,\n            zule,\n            function () { return [astrm, Inflate, Unzlib]; }\n        ], this, StrmOpt.call(this, opts, cb), function (ev) {\n            var strm = new Unzlib(ev.data);\n            onmessage = astrm(strm);\n        }, 11, 0);\n    }\n    return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bInflt,\n        zule,\n        function () { return [unzlibSync]; }\n    ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, opts) {\n    return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n    function Decompress(opts, cb) {\n        this.o = StrmOpt.call(this, opts, cb) || {};\n        this.G = Gunzip;\n        this.I = Inflate;\n        this.Z = Unzlib;\n    }\n    // init substream\n    // overriden by AsyncDecompress\n    Decompress.prototype.i = function () {\n        var _this = this;\n        this.s.ondata = function (dat, final) {\n            _this.ondata(dat, final);\n        };\n    };\n    /**\n     * Pushes a chunk to be decompressed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Decompress.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        if (!this.s) {\n            if (this.p && this.p.length) {\n                var n = new u8(this.p.length + chunk.length);\n                n.set(this.p), n.set(chunk, this.p.length);\n            }\n            else\n                this.p = chunk;\n            if (this.p.length > 2) {\n                this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n                    ? new this.G(this.o)\n                    : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n                        ? new this.I(this.o)\n                        : new this.Z(this.o);\n                this.i();\n                this.s.push(this.p, final);\n                this.p = null;\n            }\n        }\n        else\n            this.s.push(chunk, final);\n    };\n    return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n    function AsyncDecompress(opts, cb) {\n        Decompress.call(this, opts, cb);\n        this.queuedSize = 0;\n        this.G = AsyncGunzip;\n        this.I = AsyncInflate;\n        this.Z = AsyncUnzlib;\n    }\n    AsyncDecompress.prototype.i = function () {\n        var _this = this;\n        this.s.ondata = function (err, dat, final) {\n            _this.ondata(err, dat, final);\n        };\n        this.s.ondrain = function (size) {\n            _this.queuedSize -= size;\n            if (_this.ondrain)\n                _this.ondrain(size);\n        };\n    };\n    /**\n     * Pushes a chunk to be decompressed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    AsyncDecompress.prototype.push = function (chunk, final) {\n        this.queuedSize += chunk.length;\n        Decompress.prototype.push.call(this, chunk, final);\n    };\n    return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n        ? gunzip(data, opts, cb)\n        : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n            ? inflate(data, opts, cb)\n            : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, opts) {\n    return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n        ? gunzipSync(data, opts)\n        : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n            ? inflateSync(data, opts)\n            : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n    for (var k in d) {\n        var val = d[k], n = p + k, op = o;\n        if (Array.isArray(val))\n            op = mrg(o, val[1]), val = val[0];\n        if (val instanceof u8)\n            t[n] = [val, op];\n        else {\n            t[n += '/'] = [new u8(0), op];\n            fltn(val, n, t, o);\n        }\n    }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n    td.decode(et, { stream: true });\n    tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n    for (var r = '', i = 0;;) {\n        var c = d[i++];\n        var eb = (c > 127) + (c > 223) + (c > 239);\n        if (i + eb > d.length)\n            return { s: r, r: slc(d, i - 1) };\n        if (!eb)\n            r += String.fromCharCode(c);\n        else if (eb == 3) {\n            c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n                r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n        }\n        else if (eb & 1)\n            r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n        else\n            r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n    }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n    /**\n     * Creates a UTF-8 decoding stream\n     * @param cb The callback to call whenever data is decoded\n     */\n    function DecodeUTF8(cb) {\n        this.ondata = cb;\n        if (tds)\n            this.t = new TextDecoder();\n        else\n            this.p = et;\n    }\n    /**\n     * Pushes a chunk to be decoded from UTF-8 binary\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    DecodeUTF8.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        final = !!final;\n        if (this.t) {\n            this.ondata(this.t.decode(chunk, { stream: true }), final);\n            if (final) {\n                if (this.t.decode().length)\n                    err(8);\n                this.t = null;\n            }\n            return;\n        }\n        if (!this.p)\n            err(4);\n        var dat = new u8(this.p.length + chunk.length);\n        dat.set(this.p);\n        dat.set(chunk, this.p.length);\n        var _a = dutf8(dat), s = _a.s, r = _a.r;\n        if (final) {\n            if (r.length)\n                err(8);\n            this.p = null;\n        }\n        else\n            this.p = r;\n        this.ondata(s, final);\n    };\n    return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n    /**\n     * Creates a UTF-8 decoding stream\n     * @param cb The callback to call whenever data is encoded\n     */\n    function EncodeUTF8(cb) {\n        this.ondata = cb;\n    }\n    /**\n     * Pushes a chunk to be encoded to UTF-8\n     * @param chunk The string data to push\n     * @param final Whether this is the last chunk\n     */\n    EncodeUTF8.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        if (this.d)\n            err(4);\n        this.ondata(strToU8(chunk), this.d = final || false);\n    };\n    return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n *               not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n    if (latin1) {\n        var ar_1 = new u8(str.length);\n        for (var i = 0; i < str.length; ++i)\n            ar_1[i] = str.charCodeAt(i);\n        return ar_1;\n    }\n    if (te)\n        return te.encode(str);\n    var l = str.length;\n    var ar = new u8(str.length + (str.length >> 1));\n    var ai = 0;\n    var w = function (v) { ar[ai++] = v; };\n    for (var i = 0; i < l; ++i) {\n        if (ai + 5 > ar.length) {\n            var n = new u8(ai + 8 + ((l - i) << 1));\n            n.set(ar);\n            ar = n;\n        }\n        var c = str.charCodeAt(i);\n        if (c < 128 || latin1)\n            w(c);\n        else if (c < 2048)\n            w(192 | (c >> 6)), w(128 | (c & 63));\n        else if (c > 55295 && c < 57344)\n            c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n                w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n        else\n            w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n    }\n    return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n *               not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n    if (latin1) {\n        var r = '';\n        for (var i = 0; i < dat.length; i += 16384)\n            r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n        return r;\n    }\n    else if (td) {\n        return td.decode(dat);\n    }\n    else {\n        var _a = dutf8(dat), s = _a.s, r = _a.r;\n        if (r.length)\n            err(8);\n        return s;\n    }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n    var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n    var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n    return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n    for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n        ;\n    return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n    var le = 0;\n    if (ex) {\n        for (var k in ex) {\n            var l = ex[k].length;\n            if (l > 65535)\n                err(9);\n            le += l + 4;\n        }\n    }\n    return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n    var fl = fn.length, ex = f.extra, col = co && co.length;\n    var exl = exfl(ex);\n    wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n    if (ce != null)\n        d[b++] = 20, d[b++] = f.os;\n    d[b] = 20, b += 2; // spec compliance? what's that?\n    d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n    d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n    var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n    if (y < 0 || y > 119)\n        err(10);\n    wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n    if (c != -1) {\n        wbytes(d, b, f.crc);\n        wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n        wbytes(d, b + 8, f.size);\n    }\n    wbytes(d, b + 12, fl);\n    wbytes(d, b + 14, exl), b += 16;\n    if (ce != null) {\n        wbytes(d, b, col);\n        wbytes(d, b + 6, f.attrs);\n        wbytes(d, b + 10, ce), b += 14;\n    }\n    d.set(fn, b);\n    b += fl;\n    if (exl) {\n        for (var k in ex) {\n            var exf = ex[k], l = exf.length;\n            wbytes(d, b, +k);\n            wbytes(d, b + 2, l);\n            d.set(exf, b + 4), b += 4 + l;\n        }\n    }\n    if (col)\n        d.set(co, b), b += col;\n    return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n    wbytes(o, b, 0x6054B50); // skip disk\n    wbytes(o, b + 8, c);\n    wbytes(o, b + 10, c);\n    wbytes(o, b + 12, d);\n    wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n    /**\n     * Creates a pass-through stream that can be added to ZIP archives\n     * @param filename The filename to associate with this data stream\n     */\n    function ZipPassThrough(filename) {\n        this.filename = filename;\n        this.c = crc();\n        this.size = 0;\n        this.compression = 0;\n    }\n    /**\n     * Processes a chunk and pushes to the output stream. You can override this\n     * method in a subclass for custom behavior, but by default this passes\n     * the data through. You must call this.ondata(err, chunk, final) at some\n     * point in this method.\n     * @param chunk The chunk to process\n     * @param final Whether this is the last chunk\n     */\n    ZipPassThrough.prototype.process = function (chunk, final) {\n        this.ondata(null, chunk, final);\n    };\n    /**\n     * Pushes a chunk to be added. If you are subclassing this with a custom\n     * compression algorithm, note that you must push data from the source\n     * file only, pre-compression.\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    ZipPassThrough.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        this.c.p(chunk);\n        this.size += chunk.length;\n        if (final)\n            this.crc = this.c.d();\n        this.process(chunk, final || false);\n    };\n    return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates a DEFLATE stream that can be added to ZIP archives\n     * @param filename The filename to associate with this data stream\n     * @param opts The compression options\n     */\n    function ZipDeflate(filename, opts) {\n        var _this = this;\n        if (!opts)\n            opts = {};\n        ZipPassThrough.call(this, filename);\n        this.d = new Deflate(opts, function (dat, final) {\n            _this.ondata(null, dat, final);\n        });\n        this.compression = 8;\n        this.flag = dbf(opts.level);\n    }\n    ZipDeflate.prototype.process = function (chunk, final) {\n        try {\n            this.d.push(chunk, final);\n        }\n        catch (e) {\n            this.ondata(e, null, final);\n        }\n    };\n    /**\n     * Pushes a chunk to be deflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    ZipDeflate.prototype.push = function (chunk, final) {\n        ZipPassThrough.prototype.push.call(this, chunk, final);\n    };\n    return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n     * @param filename The filename to associate with this data stream\n     * @param opts The compression options\n     */\n    function AsyncZipDeflate(filename, opts) {\n        var _this = this;\n        if (!opts)\n            opts = {};\n        ZipPassThrough.call(this, filename);\n        this.d = new AsyncDeflate(opts, function (err, dat, final) {\n            _this.ondata(err, dat, final);\n        });\n        this.compression = 8;\n        this.flag = dbf(opts.level);\n        this.terminate = this.d.terminate;\n    }\n    AsyncZipDeflate.prototype.process = function (chunk, final) {\n        this.d.push(chunk, final);\n    };\n    /**\n     * Pushes a chunk to be deflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    AsyncZipDeflate.prototype.push = function (chunk, final) {\n        ZipPassThrough.prototype.push.call(this, chunk, final);\n    };\n    return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n    /**\n     * Creates an empty ZIP archive to which files can be added\n     * @param cb The callback to call whenever data for the generated ZIP archive\n     *           is available\n     */\n    function Zip(cb) {\n        this.ondata = cb;\n        this.u = [];\n        this.d = 1;\n    }\n    /**\n     * Adds a file to the ZIP archive\n     * @param file The file stream to add\n     */\n    Zip.prototype.add = function (file) {\n        var _this = this;\n        if (!this.ondata)\n            err(5);\n        // finishing or finished\n        if (this.d & 2)\n            this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n        else {\n            var f = strToU8(file.filename), fl_1 = f.length;\n            var com = file.comment, o = com && strToU8(com);\n            var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n            var hl_1 = fl_1 + exfl(file.extra) + 30;\n            if (fl_1 > 65535)\n                this.ondata(err(11, 0, 1), null, false);\n            var header = new u8(hl_1);\n            wzh(header, 0, file, f, u, -1);\n            var chks_1 = [header];\n            var pAll_1 = function () {\n                for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n                    var chk = chks_2[_i];\n                    _this.ondata(null, chk, false);\n                }\n                chks_1 = [];\n            };\n            var tr_1 = this.d;\n            this.d = 0;\n            var ind_1 = this.u.length;\n            var uf_1 = mrg(file, {\n                f: f,\n                u: u,\n                o: o,\n                t: function () {\n                    if (file.terminate)\n                        file.terminate();\n                },\n                r: function () {\n                    pAll_1();\n                    if (tr_1) {\n                        var nxt = _this.u[ind_1 + 1];\n                        if (nxt)\n                            nxt.r();\n                        else\n                            _this.d = 1;\n                    }\n                    tr_1 = 1;\n                }\n            });\n            var cl_1 = 0;\n            file.ondata = function (err, dat, final) {\n                if (err) {\n                    _this.ondata(err, dat, final);\n                    _this.terminate();\n                }\n                else {\n                    cl_1 += dat.length;\n                    chks_1.push(dat);\n                    if (final) {\n                        var dd = new u8(16);\n                        wbytes(dd, 0, 0x8074B50);\n                        wbytes(dd, 4, file.crc);\n                        wbytes(dd, 8, cl_1);\n                        wbytes(dd, 12, file.size);\n                        chks_1.push(dd);\n                        uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n                        if (tr_1)\n                            uf_1.r();\n                        tr_1 = 1;\n                    }\n                    else if (tr_1)\n                        pAll_1();\n                }\n            };\n            this.u.push(uf_1);\n        }\n    };\n    /**\n     * Ends the process of adding files and prepares to emit the final chunks.\n     * This *must* be called after adding all desired files for the resulting\n     * ZIP file to work properly.\n     */\n    Zip.prototype.end = function () {\n        var _this = this;\n        if (this.d & 2) {\n            this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n            return;\n        }\n        if (this.d)\n            this.e();\n        else\n            this.u.push({\n                r: function () {\n                    if (!(_this.d & 1))\n                        return;\n                    _this.u.splice(-1, 1);\n                    _this.e();\n                },\n                t: function () { }\n            });\n        this.d = 3;\n    };\n    Zip.prototype.e = function () {\n        var bt = 0, l = 0, tl = 0;\n        for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n            var f = _a[_i];\n            tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n        }\n        var out = new u8(tl + 22);\n        for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n            var f = _c[_b];\n            wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n            bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n        }\n        wzf(out, bt, this.u.length, tl, l);\n        this.ondata(null, out, true);\n        this.d = 2;\n    };\n    /**\n     * A method to terminate any internal workers used by the stream. Subsequent\n     * calls to add() will fail.\n     */\n    Zip.prototype.terminate = function () {\n        for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n            var f = _a[_i];\n            f.t();\n        }\n        this.d = 2;\n    };\n    return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    var r = {};\n    fltn(data, '', r, opts);\n    var k = Object.keys(r);\n    var lft = k.length, o = 0, tot = 0;\n    var slft = lft, files = new Array(lft);\n    var term = [];\n    var tAll = function () {\n        for (var i = 0; i < term.length; ++i)\n            term[i]();\n    };\n    var cbd = function (a, b) {\n        mt(function () { cb(a, b); });\n    };\n    mt(function () { cbd = cb; });\n    var cbf = function () {\n        var out = new u8(tot + 22), oe = o, cdl = tot - o;\n        tot = 0;\n        for (var i = 0; i < slft; ++i) {\n            var f = files[i];\n            try {\n                var l = f.c.length;\n                wzh(out, tot, f, f.f, f.u, l);\n                var badd = 30 + f.f.length + exfl(f.extra);\n                var loc = tot + badd;\n                out.set(f.c, loc);\n                wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n            }\n            catch (e) {\n                return cbd(e, null);\n            }\n        }\n        wzf(out, o, files.length, cdl, oe);\n        cbd(null, out);\n    };\n    if (!lft)\n        cbf();\n    var _loop_1 = function (i) {\n        var fn = k[i];\n        var _a = r[fn], file = _a[0], p = _a[1];\n        var c = crc(), size = file.length;\n        c.p(file);\n        var f = strToU8(fn), s = f.length;\n        var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n        var exl = exfl(p.extra);\n        var compression = p.level == 0 ? 0 : 8;\n        var cbl = function (e, d) {\n            if (e) {\n                tAll();\n                cbd(e, null);\n            }\n            else {\n                var l = d.length;\n                files[i] = mrg(p, {\n                    size: size,\n                    crc: c.d(),\n                    c: d,\n                    f: f,\n                    m: m,\n                    u: s != fn.length || (m && (com.length != ms)),\n                    compression: compression\n                });\n                o += 30 + s + exl + l;\n                tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n                if (!--lft)\n                    cbf();\n            }\n        };\n        if (s > 65535)\n            cbl(err(11, 0, 1), null);\n        if (!compression)\n            cbl(null, file);\n        else if (size < 160000) {\n            try {\n                cbl(null, deflateSync(file, p));\n            }\n            catch (e) {\n                cbl(e, null);\n            }\n        }\n        else\n            term.push(deflate(file, p, cbl));\n    };\n    // Cannot use lft because it can decrease\n    for (var i = 0; i < slft; ++i) {\n        _loop_1(i);\n    }\n    return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n    if (!opts)\n        opts = {};\n    var r = {};\n    var files = [];\n    fltn(data, '', r, opts);\n    var o = 0;\n    var tot = 0;\n    for (var fn in r) {\n        var _a = r[fn], file = _a[0], p = _a[1];\n        var compression = p.level == 0 ? 0 : 8;\n        var f = strToU8(fn), s = f.length;\n        var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n        var exl = exfl(p.extra);\n        if (s > 65535)\n            err(11);\n        var d = compression ? deflateSync(file, p) : file, l = d.length;\n        var c = crc();\n        c.p(file);\n        files.push(mrg(p, {\n            size: file.length,\n            crc: c.d(),\n            c: d,\n            f: f,\n            m: m,\n            u: s != fn.length || (m && (com.length != ms)),\n            o: o,\n            compression: compression\n        }));\n        o += 30 + s + exl + l;\n        tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n    }\n    var out = new u8(tot + 22), oe = o, cdl = tot - o;\n    for (var i = 0; i < files.length; ++i) {\n        var f = files[i];\n        wzh(out, f.o, f, f.f, f.u, f.c.length);\n        var badd = 30 + f.f.length + exfl(f.extra);\n        out.set(f.c, f.o + badd);\n        wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n    }\n    wzf(out, o, files.length, cdl, oe);\n    return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n    function UnzipPassThrough() {\n    }\n    UnzipPassThrough.prototype.push = function (data, final) {\n        this.ondata(null, data, final);\n    };\n    UnzipPassThrough.compression = 0;\n    return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates a DEFLATE decompression that can be used in ZIP archives\n     */\n    function UnzipInflate() {\n        var _this = this;\n        this.i = new Inflate(function (dat, final) {\n            _this.ondata(null, dat, final);\n        });\n    }\n    UnzipInflate.prototype.push = function (data, final) {\n        try {\n            this.i.push(data, final);\n        }\n        catch (e) {\n            this.ondata(e, null, final);\n        }\n    };\n    UnzipInflate.compression = 8;\n    return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates a DEFLATE decompression that can be used in ZIP archives\n     */\n    function AsyncUnzipInflate(_, sz) {\n        var _this = this;\n        if (sz < 320000) {\n            this.i = new Inflate(function (dat, final) {\n                _this.ondata(null, dat, final);\n            });\n        }\n        else {\n            this.i = new AsyncInflate(function (err, dat, final) {\n                _this.ondata(err, dat, final);\n            });\n            this.terminate = this.i.terminate;\n        }\n    }\n    AsyncUnzipInflate.prototype.push = function (data, final) {\n        if (this.i.terminate)\n            data = slc(data, 0);\n        this.i.push(data, final);\n    };\n    AsyncUnzipInflate.compression = 8;\n    return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n    /**\n     * Creates a ZIP decompression stream\n     * @param cb The callback to call whenever a file in the ZIP archive is found\n     */\n    function Unzip(cb) {\n        this.onfile = cb;\n        this.k = [];\n        this.o = {\n            0: UnzipPassThrough\n        };\n        this.p = et;\n    }\n    /**\n     * Pushes a chunk to be unzipped\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Unzip.prototype.push = function (chunk, final) {\n        var _this = this;\n        if (!this.onfile)\n            err(5);\n        if (!this.p)\n            err(4);\n        if (this.c > 0) {\n            var len = Math.min(this.c, chunk.length);\n            var toAdd = chunk.subarray(0, len);\n            this.c -= len;\n            if (this.d)\n                this.d.push(toAdd, !this.c);\n            else\n                this.k[0].push(toAdd);\n            chunk = chunk.subarray(len);\n            if (chunk.length)\n                return this.push(chunk, final);\n        }\n        else {\n            var f = 0, i = 0, is = void 0, buf = void 0;\n            if (!this.p.length)\n                buf = chunk;\n            else if (!chunk.length)\n                buf = this.p;\n            else {\n                buf = new u8(this.p.length + chunk.length);\n                buf.set(this.p), buf.set(chunk, this.p.length);\n            }\n            var l = buf.length, oc = this.c, add = oc && this.d;\n            var _loop_2 = function () {\n                var _a;\n                var sig = b4(buf, i);\n                if (sig == 0x4034B50) {\n                    f = 1, is = i;\n                    this_1.d = null;\n                    this_1.c = 0;\n                    var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n                    if (l > i + 30 + fnl + es) {\n                        var chks_3 = [];\n                        this_1.k.unshift(chks_3);\n                        f = 2;\n                        var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n                        var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n                        if (sc_1 == 4294967295) {\n                            _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n                        }\n                        else if (dd)\n                            sc_1 = -1;\n                        i += es;\n                        this_1.c = sc_1;\n                        var d_1;\n                        var file_1 = {\n                            name: fn_1,\n                            compression: cmp_1,\n                            start: function () {\n                                if (!file_1.ondata)\n                                    err(5);\n                                if (!sc_1)\n                                    file_1.ondata(null, et, true);\n                                else {\n                                    var ctr = _this.o[cmp_1];\n                                    if (!ctr)\n                                        file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n                                    d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n                                    d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n                                    for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n                                        var dat = chks_4[_i];\n                                        d_1.push(dat, false);\n                                    }\n                                    if (_this.k[0] == chks_3 && _this.c)\n                                        _this.d = d_1;\n                                    else\n                                        d_1.push(et, true);\n                                }\n                            },\n                            terminate: function () {\n                                if (d_1 && d_1.terminate)\n                                    d_1.terminate();\n                            }\n                        };\n                        if (sc_1 >= 0)\n                            file_1.size = sc_1, file_1.originalSize = su_1;\n                        this_1.onfile(file_1);\n                    }\n                    return \"break\";\n                }\n                else if (oc) {\n                    if (sig == 0x8074B50) {\n                        is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n                        return \"break\";\n                    }\n                    else if (sig == 0x2014B50) {\n                        is = i -= 4, f = 3, this_1.c = 0;\n                        return \"break\";\n                    }\n                }\n            };\n            var this_1 = this;\n            for (; i < l - 4; ++i) {\n                var state_1 = _loop_2();\n                if (state_1 === \"break\")\n                    break;\n            }\n            this.p = et;\n            if (oc < 0) {\n                var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n                if (add)\n                    add.push(dat, !!f);\n                else\n                    this.k[+(f == 2)].push(dat);\n            }\n            if (f & 2)\n                return this.push(buf.subarray(i), final);\n            this.p = buf.subarray(i);\n        }\n        if (final) {\n            if (this.c)\n                err(13);\n            this.p = null;\n        }\n    };\n    /**\n     * Registers a decoder with the stream, allowing for files compressed with\n     * the compression type provided to be expanded correctly\n     * @param decoder The decoder constructor\n     */\n    Unzip.prototype.register = function (decoder) {\n        this.o[decoder.compression] = decoder;\n    };\n    return Unzip;\n}());\nexport { Unzip };\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nexport function unzip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    var term = [];\n    var tAll = function () {\n        for (var i = 0; i < term.length; ++i)\n            term[i]();\n    };\n    var files = {};\n    var cbd = function (a, b) {\n        mt(function () { cb(a, b); });\n    };\n    mt(function () { cbd = cb; });\n    var e = data.length - 22;\n    for (; b4(data, e) != 0x6054B50; --e) {\n        if (!e || data.length - e > 65558) {\n            cbd(err(13, 0, 1), null);\n            return tAll;\n        }\n    }\n    ;\n    var lft = b2(data, e + 8);\n    if (lft) {\n        var c = lft;\n        var o = b4(data, e + 16);\n        var z = o == 4294967295 || c == 65535;\n        if (z) {\n            var ze = b4(data, e - 12);\n            z = b4(data, ze) == 0x6064B50;\n            if (z) {\n                c = lft = b4(data, ze + 32);\n                o = b4(data, ze + 48);\n            }\n        }\n        var fltr = opts && opts.filter;\n        var _loop_3 = function (i) {\n            var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n            o = no;\n            var cbl = function (e, d) {\n                if (e) {\n                    tAll();\n                    cbd(e, null);\n                }\n                else {\n                    if (d)\n                        files[fn] = d;\n                    if (!--lft)\n                        cbd(null, files);\n                }\n            };\n            if (!fltr || fltr({\n                name: fn,\n                size: sc,\n                originalSize: su,\n                compression: c_1\n            })) {\n                if (!c_1)\n                    cbl(null, slc(data, b, b + sc));\n                else if (c_1 == 8) {\n                    var infl = data.subarray(b, b + sc);\n                    // Synchronously decompress under 512KB, or barely-compressed data\n                    if (su < 524288 || sc > 0.8 * su) {\n                        try {\n                            cbl(null, inflateSync(infl, { out: new u8(su) }));\n                        }\n                        catch (e) {\n                            cbl(e, null);\n                        }\n                    }\n                    else\n                        term.push(inflate(infl, { size: su }, cbl));\n                }\n                else\n                    cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n            }\n            else\n                cbl(null, null);\n        };\n        for (var i = 0; i < c; ++i) {\n            _loop_3(i);\n        }\n    }\n    else\n        cbd(null, {});\n    return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nexport function unzipSync(data, opts) {\n    var files = {};\n    var e = data.length - 22;\n    for (; b4(data, e) != 0x6054B50; --e) {\n        if (!e || data.length - e > 65558)\n            err(13);\n    }\n    ;\n    var c = b2(data, e + 8);\n    if (!c)\n        return {};\n    var o = b4(data, e + 16);\n    var z = o == 4294967295 || c == 65535;\n    if (z) {\n        var ze = b4(data, e - 12);\n        z = b4(data, ze) == 0x6064B50;\n        if (z) {\n            c = b4(data, ze + 32);\n            o = b4(data, ze + 48);\n        }\n    }\n    var fltr = opts && opts.filter;\n    for (var i = 0; i < c; ++i) {\n        var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n        o = no;\n        if (!fltr || fltr({\n            name: fn,\n            size: sc,\n            originalSize: su,\n            compression: c_2\n        })) {\n            if (!c_2)\n                files[fn] = slc(data, b, b + sc);\n            else if (c_2 == 8)\n                files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n            else\n                err(14, 'unknown compression type ' + c_2);\n        }\n    }\n    return files;\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","/**\n * Ref https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT\n */\nimport { UINT16_LE, UINT32_LE } from \"token-types\";\nexport const Signature = {\n    LocalFileHeader: 0x04034b50,\n    DataDescriptor: 0x08074b50,\n    CentralFileHeader: 0x02014b50,\n    EndOfCentralDirectory: 0x06054b50\n};\nexport const DataDescriptor = {\n    get(array) {\n        const flags = UINT16_LE.get(array, 6);\n        return {\n            signature: UINT32_LE.get(array, 0),\n            compressedSize: UINT32_LE.get(array, 8),\n            uncompressedSize: UINT32_LE.get(array, 12),\n        };\n    }, len: 16\n};\n/**\n * First part of the ZIP Local File Header\n * Offset | Bytes| Description\n * -------|------+-------------------------------------------------------------------\n *      0 |    4 | Signature (0x04034b50)\n *      4 |    2 | Minimum version needed to extract\n *      6 |    2 | Bit flag\n *      8 |    2 | Compression method\n *     10 |    2 | File last modification time (MS-DOS format)\n *     12 |    2 | File last modification date (MS-DOS format)\n *     14 |    4 | CRC-32 of uncompressed data\n *     18 |    4 | Compressed size\n *     22 |    4 | Uncompressed size\n *     26 |    2 | File name length (n)\n *     28 |    2 | Extra field length (m)\n *     30 |    n | File name\n * 30 + n |    m | Extra field\n */\nexport const LocalFileHeaderToken = {\n    get(array) {\n        const flags = UINT16_LE.get(array, 6);\n        return {\n            signature: UINT32_LE.get(array, 0),\n            minVersion: UINT16_LE.get(array, 4),\n            dataDescriptor: !!(flags & 0x0008),\n            compressedMethod: UINT16_LE.get(array, 8),\n            compressedSize: UINT32_LE.get(array, 18),\n            uncompressedSize: UINT32_LE.get(array, 22),\n            filenameLength: UINT16_LE.get(array, 26),\n            extraFieldLength: UINT16_LE.get(array, 28),\n            filename: null\n        };\n    }, len: 30\n};\n/**\n * 4.3.16  End of central directory record:\n *  end of central dir signature (0x06064b50)                                      4 bytes\n *  number of this disk                                                            2 bytes\n *  number of the disk with the start of the central directory                     2 bytes\n *  total number of entries in the central directory on this disk                  2 bytes\n *  total number of entries in the size of the central directory                   2 bytes\n *  sizeOfTheCentralDirectory                                                      4 bytes\n *  offset of start of central directory with respect to the starting disk number  4 bytes\n *  .ZIP file comment length                                                       2 bytes\n *  .ZIP file comment       (variable size)\n */\nexport const EndOfCentralDirectoryRecordToken = {\n    get(array) {\n        return {\n            signature: UINT32_LE.get(array, 0),\n            nrOfThisDisk: UINT16_LE.get(array, 4),\n            nrOfThisDiskWithTheStart: UINT16_LE.get(array, 6),\n            nrOfEntriesOnThisDisk: UINT16_LE.get(array, 8),\n            nrOfEntriesOfSize: UINT16_LE.get(array, 10),\n            sizeOfCd: UINT32_LE.get(array, 12),\n            offsetOfStartOfCd: UINT32_LE.get(array, 16),\n            zipFileCommentLength: UINT16_LE.get(array, 20),\n        };\n    }, len: 22\n};\n/**\n * File header:\n *    central file header signature   4 bytes   0 (0x02014b50)\n *    version made by                 2 bytes   4\n *    version needed to extract       2 bytes   6\n *    general purpose bit flag        2 bytes   8\n *    compression method              2 bytes  10\n *    last mod file time              2 bytes  12\n *    last mod file date              2 bytes  14\n *    crc-32                          4 bytes  16\n *    compressed size                 4 bytes  20\n *    uncompressed size               4 bytes  24\n *    file name length                2 bytes  28\n *    extra field length              2 bytes  30\n *    file comment length             2 bytes  32\n *    disk number start               2 bytes  34\n *    internal file attributes        2 bytes  36\n *    external file attributes        4 bytes  38\n *    relative offset of local header 4 bytes  42\n */\nexport const FileHeader = {\n    get(array) {\n        const flags = UINT16_LE.get(array, 8);\n        return {\n            signature: UINT32_LE.get(array, 0),\n            minVersion: UINT16_LE.get(array, 6),\n            dataDescriptor: !!(flags & 0x0008),\n            compressedMethod: UINT16_LE.get(array, 10),\n            compressedSize: UINT32_LE.get(array, 20),\n            uncompressedSize: UINT32_LE.get(array, 24),\n            filenameLength: UINT16_LE.get(array, 28),\n            extraFieldLength: UINT16_LE.get(array, 30),\n            fileCommentLength: UINT16_LE.get(array, 32),\n            relativeOffsetOfLocalHeader: UINT32_LE.get(array, 42),\n            filename: null\n        };\n    }, len: 46\n};\n","import { StringType, UINT32_LE } from 'token-types';\nimport { decompressSync } from 'fflate';\nimport initDebug from 'debug';\nimport { DataDescriptor, EndOfCentralDirectoryRecordToken, FileHeader, LocalFileHeaderToken, Signature } from \"./ZipToken.js\";\nfunction signatureToArray(signature) {\n    const signatureBytes = new Uint8Array(UINT32_LE.len);\n    UINT32_LE.put(signatureBytes, 0, signature);\n    return signatureBytes;\n}\nconst debug = initDebug('tokenizer:inflate');\nconst syncBufferSize = 256 * 1024;\nconst ddSignatureArray = signatureToArray(Signature.DataDescriptor);\nconst eocdSignatureBytes = signatureToArray(Signature.EndOfCentralDirectory);\nexport class ZipHandler {\n    constructor(tokenizer) {\n        this.tokenizer = tokenizer;\n        this.syncBuffer = new Uint8Array(syncBufferSize);\n    }\n    async isZip() {\n        return await this.peekSignature() === Signature.LocalFileHeader;\n    }\n    peekSignature() {\n        return this.tokenizer.peekToken(UINT32_LE);\n    }\n    async findEndOfCentralDirectoryLocator() {\n        const randomReadTokenizer = this.tokenizer;\n        const chunkLength = Math.min(16 * 1024, randomReadTokenizer.fileInfo.size);\n        const buffer = this.syncBuffer.subarray(0, chunkLength);\n        await this.tokenizer.readBuffer(buffer, { position: randomReadTokenizer.fileInfo.size - chunkLength });\n        // Search the buffer from end to beginning for EOCD signature\n        // const signature = 0x06054b50;\n        for (let i = buffer.length - 4; i >= 0; i--) {\n            // Compare 4 bytes directly without calling readUInt32LE\n            if (buffer[i] === eocdSignatureBytes[0] &&\n                buffer[i + 1] === eocdSignatureBytes[1] &&\n                buffer[i + 2] === eocdSignatureBytes[2] &&\n                buffer[i + 3] === eocdSignatureBytes[3]) {\n                return randomReadTokenizer.fileInfo.size - chunkLength + i;\n            }\n        }\n        return -1;\n    }\n    async readCentralDirectory() {\n        if (!this.tokenizer.supportsRandomAccess()) {\n            debug('Cannot reading central-directory without random-read support');\n            return;\n        }\n        debug('Reading central-directory...');\n        const pos = this.tokenizer.position;\n        const offset = await this.findEndOfCentralDirectoryLocator();\n        if (offset > 0) {\n            debug('Central-directory 32-bit signature found');\n            const eocdHeader = await this.tokenizer.readToken(EndOfCentralDirectoryRecordToken, offset);\n            const files = [];\n            this.tokenizer.setPosition(eocdHeader.offsetOfStartOfCd);\n            for (let n = 0; n < eocdHeader.nrOfEntriesOfSize; ++n) {\n                const entry = await this.tokenizer.readToken(FileHeader);\n                if (entry.signature !== Signature.CentralFileHeader) {\n                    throw new Error('Expected Central-File-Header signature');\n                }\n                entry.filename = await this.tokenizer.readToken(new StringType(entry.filenameLength, 'utf-8'));\n                await this.tokenizer.ignore(entry.extraFieldLength);\n                await this.tokenizer.ignore(entry.fileCommentLength);\n                files.push(entry);\n                debug(`Add central-directory file-entry: n=${n + 1}/${files.length}: filename=${files[n].filename}`);\n            }\n            this.tokenizer.setPosition(pos);\n            return files;\n        }\n        this.tokenizer.setPosition(pos);\n    }\n    async unzip(fileCb) {\n        const entries = await this.readCentralDirectory();\n        if (entries) {\n            // Use Central Directory to iterate over files\n            return this.iterateOverCentralDirectory(entries, fileCb);\n        }\n        // Scan Zip files for local-file-header\n        let stop = false;\n        do {\n            const zipHeader = await this.readLocalFileHeader();\n            if (!zipHeader)\n                break;\n            const next = fileCb(zipHeader);\n            stop = !!next.stop;\n            let fileData = undefined;\n            await this.tokenizer.ignore(zipHeader.extraFieldLength);\n            if (zipHeader.dataDescriptor && zipHeader.compressedSize === 0) {\n                const chunks = [];\n                let len = syncBufferSize;\n                debug('Compressed-file-size unknown, scanning for next data-descriptor-signature....');\n                let nextHeaderIndex = -1;\n                while (nextHeaderIndex < 0 && len === syncBufferSize) {\n                    len = await this.tokenizer.peekBuffer(this.syncBuffer, { mayBeLess: true });\n                    nextHeaderIndex = indexOf(this.syncBuffer.subarray(0, len), ddSignatureArray);\n                    const size = nextHeaderIndex >= 0 ? nextHeaderIndex : len;\n                    if (next.handler) {\n                        const data = new Uint8Array(size);\n                        await this.tokenizer.readBuffer(data);\n                        chunks.push(data);\n                    }\n                    else {\n                        // Move position to the next header if found, skip the whole buffer otherwise\n                        await this.tokenizer.ignore(size);\n                    }\n                }\n                debug(`Found data-descriptor-signature at pos=${this.tokenizer.position}`);\n                if (next.handler) {\n                    await this.inflate(zipHeader, mergeArrays(chunks), next.handler);\n                }\n            }\n            else {\n                if (next.handler) {\n                    debug(`Reading compressed-file-data: ${zipHeader.compressedSize} bytes`);\n                    fileData = new Uint8Array(zipHeader.compressedSize);\n                    await this.tokenizer.readBuffer(fileData);\n                    await this.inflate(zipHeader, fileData, next.handler);\n                }\n                else {\n                    debug(`Ignoring compressed-file-data: ${zipHeader.compressedSize} bytes`);\n                    await this.tokenizer.ignore(zipHeader.compressedSize);\n                }\n            }\n            debug(`Reading data-descriptor at pos=${this.tokenizer.position}`);\n            if (zipHeader.dataDescriptor) {\n                // await this.tokenizer.ignore(DataDescriptor.len);\n                const dataDescriptor = await this.tokenizer.readToken(DataDescriptor);\n                if (dataDescriptor.signature !== 0x08074b50) {\n                    throw new Error(`Expected data-descriptor-signature at position ${this.tokenizer.position - DataDescriptor.len}`);\n                }\n            }\n        } while (!stop);\n    }\n    async iterateOverCentralDirectory(entries, fileCb) {\n        for (const fileHeader of entries) {\n            const next = fileCb(fileHeader);\n            if (next.handler) {\n                this.tokenizer.setPosition(fileHeader.relativeOffsetOfLocalHeader);\n                const zipHeader = await this.readLocalFileHeader();\n                if (zipHeader) {\n                    await this.tokenizer.ignore(zipHeader.extraFieldLength);\n                    const fileData = new Uint8Array(fileHeader.compressedSize);\n                    await this.tokenizer.readBuffer(fileData);\n                    await this.inflate(zipHeader, fileData, next.handler);\n                }\n            }\n            if (next.stop)\n                break;\n        }\n    }\n    inflate(zipHeader, fileData, cb) {\n        if (zipHeader.compressedMethod === 0) {\n            return cb(fileData);\n        }\n        debug(`Decompress filename=${zipHeader.filename}, compressed-size=${fileData.length}`);\n        const uncompressedData = decompressSync(fileData);\n        return cb(uncompressedData);\n    }\n    async readLocalFileHeader() {\n        const signature = await this.tokenizer.peekToken(UINT32_LE);\n        if (signature === Signature.LocalFileHeader) {\n            const header = await this.tokenizer.readToken(LocalFileHeaderToken);\n            header.filename = await this.tokenizer.readToken(new StringType(header.filenameLength, 'utf-8'));\n            return header;\n        }\n        if (signature === Signature.CentralFileHeader) {\n            return false;\n        }\n        if (signature === 0xE011CFD0) {\n            throw new Error('Encrypted ZIP');\n        }\n        throw new Error('Unexpected signature');\n    }\n}\nfunction indexOf(buffer, portion) {\n    const bufferLength = buffer.length;\n    const portionLength = portion.length;\n    // Return -1 if the portion is longer than the buffer\n    if (portionLength > bufferLength)\n        return -1;\n    // Search for the portion in the buffer\n    for (let i = 0; i <= bufferLength - portionLength; i++) {\n        let found = true;\n        for (let j = 0; j < portionLength; j++) {\n            if (buffer[i + j] !== portion[j]) {\n                found = false;\n                break;\n            }\n        }\n        if (found) {\n            return i; // Return the starting offset\n        }\n    }\n    return -1; // Not found\n}\nfunction mergeArrays(chunks) {\n    // Concatenate chunks into a single Uint8Array\n    const totalLength = chunks.reduce((acc, curr) => acc + curr.length, 0);\n    const mergedArray = new Uint8Array(totalLength);\n    let offset = 0;\n    for (const chunk of chunks) {\n        mergedArray.set(chunk, offset);\n        offset += chunk.length;\n    }\n    return mergedArray;\n}\n","const objectToString = Object.prototype.toString;\nconst uint8ArrayStringified = '[object Uint8Array]';\nconst arrayBufferStringified = '[object ArrayBuffer]';\n\nfunction isType(value, typeConstructor, typeStringified) {\n\tif (!value) {\n\t\treturn false;\n\t}\n\n\tif (value.constructor === typeConstructor) {\n\t\treturn true;\n\t}\n\n\treturn objectToString.call(value) === typeStringified;\n}\n\nexport function isUint8Array(value) {\n\treturn isType(value, Uint8Array, uint8ArrayStringified);\n}\n\nfunction isArrayBuffer(value) {\n\treturn isType(value, ArrayBuffer, arrayBufferStringified);\n}\n\nfunction isUint8ArrayOrArrayBuffer(value) {\n\treturn isUint8Array(value) || isArrayBuffer(value);\n}\n\nexport function assertUint8Array(value) {\n\tif (!isUint8Array(value)) {\n\t\tthrow new TypeError(`Expected \\`Uint8Array\\`, got \\`${typeof value}\\``);\n\t}\n}\n\nexport function assertUint8ArrayOrArrayBuffer(value) {\n\tif (!isUint8ArrayOrArrayBuffer(value)) {\n\t\tthrow new TypeError(`Expected \\`Uint8Array\\` or \\`ArrayBuffer\\`, got \\`${typeof value}\\``);\n\t}\n}\n\nexport function toUint8Array(value) {\n\tif (value instanceof ArrayBuffer) {\n\t\treturn new Uint8Array(value);\n\t}\n\n\tif (ArrayBuffer.isView(value)) {\n\t\treturn new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n\t}\n\n\tthrow new TypeError(`Unsupported value, got \\`${typeof value}\\`.`);\n}\n\nexport function concatUint8Arrays(arrays, totalLength) {\n\tif (arrays.length === 0) {\n\t\treturn new Uint8Array(0);\n\t}\n\n\ttotalLength ??= arrays.reduce((accumulator, currentValue) => accumulator + currentValue.length, 0);\n\n\tconst returnValue = new Uint8Array(totalLength);\n\n\tlet offset = 0;\n\tfor (const array of arrays) {\n\t\tassertUint8Array(array);\n\t\treturnValue.set(array, offset);\n\t\toffset += array.length;\n\t}\n\n\treturn returnValue;\n}\n\nexport function areUint8ArraysEqual(a, b) {\n\tassertUint8Array(a);\n\tassertUint8Array(b);\n\n\tif (a === b) {\n\t\treturn true;\n\t}\n\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\n\t// eslint-disable-next-line unicorn/no-for-loop\n\tfor (let index = 0; index < a.length; index++) {\n\t\tif (a[index] !== b[index]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nexport function compareUint8Arrays(a, b) {\n\tassertUint8Array(a);\n\tassertUint8Array(b);\n\n\tconst length = Math.min(a.length, b.length);\n\n\tfor (let index = 0; index < length; index++) {\n\t\tconst diff = a[index] - b[index];\n\t\tif (diff !== 0) {\n\t\t\treturn Math.sign(diff);\n\t\t}\n\t}\n\n\t// At this point, all the compared elements are equal.\n\t// The shorter array should come first if the arrays are of different lengths.\n\treturn Math.sign(a.length - b.length);\n}\n\nconst cachedDecoders = {\n\tutf8: new globalThis.TextDecoder('utf8'),\n};\n\nexport function uint8ArrayToString(array, encoding = 'utf8') {\n\tassertUint8ArrayOrArrayBuffer(array);\n\tcachedDecoders[encoding] ??= new globalThis.TextDecoder(encoding);\n\treturn cachedDecoders[encoding].decode(array);\n}\n\nfunction assertString(value) {\n\tif (typeof value !== 'string') {\n\t\tthrow new TypeError(`Expected \\`string\\`, got \\`${typeof value}\\``);\n\t}\n}\n\nconst cachedEncoder = new globalThis.TextEncoder();\n\nexport function stringToUint8Array(string) {\n\tassertString(string);\n\treturn cachedEncoder.encode(string);\n}\n\nfunction base64ToBase64Url(base64) {\n\treturn base64.replaceAll('+', '-').replaceAll('/', '_').replace(/=+$/, '');\n}\n\nfunction base64UrlToBase64(base64url) {\n\treturn base64url.replaceAll('-', '+').replaceAll('_', '/');\n}\n\n// Reference: https://phuoc.ng/collection/this-vs-that/concat-vs-push/\nconst MAX_BLOCK_SIZE = 65_535;\n\nexport function uint8ArrayToBase64(array, {urlSafe = false} = {}) {\n\tassertUint8Array(array);\n\n\tlet base64;\n\n\tif (array.length < MAX_BLOCK_SIZE) {\n\t// Required as `btoa` and `atob` don't properly support Unicode: https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem\n\t\tbase64 = globalThis.btoa(String.fromCodePoint.apply(this, array));\n\t} else {\n\t\tbase64 = '';\n\t\tfor (const value of array) {\n\t\t\tbase64 += String.fromCodePoint(value);\n\t\t}\n\n\t\tbase64 = globalThis.btoa(base64);\n\t}\n\n\treturn urlSafe ? base64ToBase64Url(base64) : base64;\n}\n\nexport function base64ToUint8Array(base64String) {\n\tassertString(base64String);\n\treturn Uint8Array.from(globalThis.atob(base64UrlToBase64(base64String)), x => x.codePointAt(0));\n}\n\nexport function stringToBase64(string, {urlSafe = false} = {}) {\n\tassertString(string);\n\treturn uint8ArrayToBase64(stringToUint8Array(string), {urlSafe});\n}\n\nexport function base64ToString(base64String) {\n\tassertString(base64String);\n\treturn uint8ArrayToString(base64ToUint8Array(base64String));\n}\n\nconst byteToHexLookupTable = Array.from({length: 256}, (_, index) => index.toString(16).padStart(2, '0'));\n\nexport function uint8ArrayToHex(array) {\n\tassertUint8Array(array);\n\n\t// Concatenating a string is faster than using an array.\n\tlet hexString = '';\n\n\t// eslint-disable-next-line unicorn/no-for-loop -- Max performance is critical.\n\tfor (let index = 0; index < array.length; index++) {\n\t\thexString += byteToHexLookupTable[array[index]];\n\t}\n\n\treturn hexString;\n}\n\nconst hexToDecimalLookupTable = {\n\t0: 0,\n\t1: 1,\n\t2: 2,\n\t3: 3,\n\t4: 4,\n\t5: 5,\n\t6: 6,\n\t7: 7,\n\t8: 8,\n\t9: 9,\n\ta: 10,\n\tb: 11,\n\tc: 12,\n\td: 13,\n\te: 14,\n\tf: 15,\n\tA: 10,\n\tB: 11,\n\tC: 12,\n\tD: 13,\n\tE: 14,\n\tF: 15,\n};\n\nexport function hexToUint8Array(hexString) {\n\tassertString(hexString);\n\n\tif (hexString.length % 2 !== 0) {\n\t\tthrow new Error('Invalid Hex string length.');\n\t}\n\n\tconst resultLength = hexString.length / 2;\n\tconst bytes = new Uint8Array(resultLength);\n\n\tfor (let index = 0; index < resultLength; index++) {\n\t\tconst highNibble = hexToDecimalLookupTable[hexString[index * 2]];\n\t\tconst lowNibble = hexToDecimalLookupTable[hexString[(index * 2) + 1]];\n\n\t\tif (highNibble === undefined || lowNibble === undefined) {\n\t\t\tthrow new Error(`Invalid Hex character encountered at position ${index * 2}`);\n\t\t}\n\n\t\tbytes[index] = (highNibble << 4) | lowNibble; // eslint-disable-line no-bitwise\n\t}\n\n\treturn bytes;\n}\n\n/**\n@param {DataView} view\n@returns {number}\n*/\nexport function getUintBE(view) {\n\tconst {byteLength} = view;\n\n\tif (byteLength === 6) {\n\t\treturn (view.getUint16(0) * (2 ** 32)) + view.getUint32(2);\n\t}\n\n\tif (byteLength === 5) {\n\t\treturn (view.getUint8(0) * (2 ** 32)) + view.getUint32(1);\n\t}\n\n\tif (byteLength === 4) {\n\t\treturn view.getUint32(0);\n\t}\n\n\tif (byteLength === 3) {\n\t\treturn (view.getUint8(0) * (2 ** 16)) + view.getUint16(1);\n\t}\n\n\tif (byteLength === 2) {\n\t\treturn view.getUint16(0);\n\t}\n\n\tif (byteLength === 1) {\n\t\treturn view.getUint8(0);\n\t}\n}\n\n/**\n@param {Uint8Array} array\n@param {Uint8Array} value\n@returns {number}\n*/\nexport function indexOf(array, value) {\n\tconst arrayLength = array.length;\n\tconst valueLength = value.length;\n\n\tif (valueLength === 0) {\n\t\treturn -1;\n\t}\n\n\tif (valueLength > arrayLength) {\n\t\treturn -1;\n\t}\n\n\tconst validOffsetLength = arrayLength - valueLength;\n\n\tfor (let index = 0; index <= validOffsetLength; index++) {\n\t\tlet isMatch = true;\n\t\tfor (let index2 = 0; index2 < valueLength; index2++) {\n\t\t\tif (array[index + index2] !== value[index2]) {\n\t\t\t\tisMatch = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (isMatch) {\n\t\t\treturn index;\n\t\t}\n\t}\n\n\treturn -1;\n}\n\n/**\n@param {Uint8Array} array\n@param {Uint8Array} value\n@returns {boolean}\n*/\nexport function includes(array, value) {\n\treturn indexOf(array, value) !== -1;\n}\n","import {StringType} from 'token-types';\n\nexport function stringToBytes(string) {\n\treturn [...string].map(character => character.charCodeAt(0)); // eslint-disable-line unicorn/prefer-code-point\n}\n\n/**\nChecks whether the TAR checksum is valid.\n\n@param {Uint8Array} arrayBuffer - The TAR header `[offset ... offset + 512]`.\n@param {number} offset - TAR header offset.\n@returns {boolean} `true` if the TAR checksum is valid, otherwise `false`.\n*/\nexport function tarHeaderChecksumMatches(arrayBuffer, offset = 0) {\n\tconst readSum = Number.parseInt(new StringType(6).get(arrayBuffer, 148).replace(/\\0.*$/, '').trim(), 8); // Read sum in header\n\tif (Number.isNaN(readSum)) {\n\t\treturn false;\n\t}\n\n\tlet sum = 8 * 0x20; // Initialize signed bit sum\n\n\tfor (let index = offset; index < offset + 148; index++) {\n\t\tsum += arrayBuffer[index];\n\t}\n\n\tfor (let index = offset + 156; index < offset + 512; index++) {\n\t\tsum += arrayBuffer[index];\n\t}\n\n\treturn readSum === sum;\n}\n\n/**\nID3 UINT32 sync-safe tokenizer token.\n28 bits (representing up to 256MB) integer, the msb is 0 to avoid \"false syncsignals\".\n*/\nexport const uint32SyncSafeToken = {\n\tget: (buffer, offset) => (buffer[offset + 3] & 0x7F) | ((buffer[offset + 2]) << 7) | ((buffer[offset + 1]) << 14) | ((buffer[offset]) << 21),\n\tlen: 4,\n};\n","/**\nPrimary entry point, Node.js specific entry point is index.js\n*/\n\nimport * as Token from 'token-types';\nimport * as strtok3 from 'strtok3/core';\nimport {ZipHandler} from '@tokenizer/inflate';\nimport {getUintBE} from 'uint8array-extras';\nimport {\n\tstringToBytes,\n\ttarHeaderChecksumMatches,\n\tuint32SyncSafeToken,\n} from './util.js';\nimport {extensions, mimeTypes} from './supported.js';\n\nexport const reasonableDetectionSizeInBytes = 4100; // A fair amount of file-types are detectable within this range.\n\nexport async function fileTypeFromStream(stream, options) {\n\treturn new FileTypeParser(options).fromStream(stream);\n}\n\nexport async function fileTypeFromBuffer(input, options) {\n\treturn new FileTypeParser(options).fromBuffer(input);\n}\n\nexport async function fileTypeFromBlob(blob, options) {\n\treturn new FileTypeParser(options).fromBlob(blob);\n}\n\nfunction getFileTypeFromMimeType(mimeType) {\n\tmimeType = mimeType.toLowerCase();\n\tswitch (mimeType) {\n\t\tcase 'application/epub+zip':\n\t\t\treturn {\n\t\t\t\text: 'epub',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.text':\n\t\t\treturn {\n\t\t\t\text: 'odt',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.text-template':\n\t\t\treturn {\n\t\t\t\text: 'ott',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.spreadsheet':\n\t\t\treturn {\n\t\t\t\text: 'ods',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.spreadsheet-template':\n\t\t\treturn {\n\t\t\t\text: 'ots',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.presentation':\n\t\t\treturn {\n\t\t\t\text: 'odp',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.presentation-template':\n\t\t\treturn {\n\t\t\t\text: 'otp',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.graphics':\n\t\t\treturn {\n\t\t\t\text: 'odg',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.oasis.opendocument.graphics-template':\n\t\t\treturn {\n\t\t\t\text: 'otg',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.presentationml.slideshow':\n\t\t\treturn {\n\t\t\t\text: 'ppsx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\n\t\t\treturn {\n\t\t\t\text: 'xlsx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-excel.sheet.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'xlsm',\n\t\t\t\tmime: 'application/vnd.ms-excel.sheet.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.spreadsheetml.template':\n\t\t\treturn {\n\t\t\t\text: 'xltx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-excel.template.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'xltm',\n\t\t\t\tmime: 'application/vnd.ms-excel.template.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.ms-powerpoint.slideshow.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'ppsm',\n\t\t\t\tmime: 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\n\t\t\treturn {\n\t\t\t\text: 'docx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-word.document.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'docm',\n\t\t\t\tmime: 'application/vnd.ms-word.document.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.wordprocessingml.template':\n\t\t\treturn {\n\t\t\t\text: 'dotx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-word.template.macroenabledtemplate':\n\t\t\treturn {\n\t\t\t\text: 'dotm',\n\t\t\t\tmime: 'application/vnd.ms-word.template.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.presentationml.template':\n\t\t\treturn {\n\t\t\t\text: 'potx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-powerpoint.template.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'potm',\n\t\t\t\tmime: 'application/vnd.ms-powerpoint.template.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.openxmlformats-officedocument.presentationml.presentation':\n\t\t\treturn {\n\t\t\t\text: 'pptx',\n\t\t\t\tmime: mimeType,\n\t\t\t};\n\t\tcase 'application/vnd.ms-powerpoint.presentation.macroenabled':\n\t\t\treturn {\n\t\t\t\text: 'pptm',\n\t\t\t\tmime: 'application/vnd.ms-powerpoint.presentation.macroenabled.12',\n\t\t\t};\n\t\tcase 'application/vnd.ms-visio.drawing':\n\t\t\treturn {\n\t\t\t\text: 'vsdx',\n\t\t\t\tmime: 'application/vnd.visio',\n\t\t\t};\n\t\tcase 'application/vnd.ms-package.3dmanufacturing-3dmodel+xml':\n\t\t\treturn {\n\t\t\t\text: '3mf',\n\t\t\t\tmime: 'model/3mf',\n\t\t\t};\n\t\tdefault:\n\t}\n}\n\nfunction _check(buffer, headers, options) {\n\toptions = {\n\t\toffset: 0,\n\t\t...options,\n\t};\n\n\tfor (const [index, header] of headers.entries()) {\n\t\t// If a bitmask is set\n\t\tif (options.mask) {\n\t\t\t// If header doesn't equal `buf` with bits masked off\n\t\t\tif (header !== (options.mask[index] & buffer[index + options.offset])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if (header !== buffer[index + options.offset]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nexport async function fileTypeFromTokenizer(tokenizer, options) {\n\treturn new FileTypeParser(options).fromTokenizer(tokenizer);\n}\n\nexport async function fileTypeStream(webStream, options) {\n\treturn new FileTypeParser(options).toDetectionStream(webStream, options);\n}\n\nexport class FileTypeParser {\n\tconstructor(options) {\n\t\tthis.options = {\n\t\t\tmpegOffsetTolerance: 0,\n\t\t\t...options,\n\t\t};\n\n\t\tthis.detectors = [...(options?.customDetectors ?? []),\n\t\t\t{id: 'core', detect: this.detectConfident},\n\t\t\t{id: 'core.imprecise', detect: this.detectImprecise}];\n\t\tthis.tokenizerOptions = {\n\t\t\tabortSignal: options?.signal,\n\t\t};\n\t}\n\n\tasync fromTokenizer(tokenizer) {\n\t\tconst initialPosition = tokenizer.position;\n\n\t\t// Iterate through all file-type detectors\n\t\tfor (const detector of this.detectors) {\n\t\t\tconst fileType = await detector.detect(tokenizer);\n\t\t\tif (fileType) {\n\t\t\t\treturn fileType;\n\t\t\t}\n\n\t\t\tif (initialPosition !== tokenizer.position) {\n\t\t\t\treturn undefined; // Cannot proceed scanning of the tokenizer is at an arbitrary position\n\t\t\t}\n\t\t}\n\t}\n\n\tasync fromBuffer(input) {\n\t\tif (!(input instanceof Uint8Array || input instanceof ArrayBuffer)) {\n\t\t\tthrow new TypeError(`Expected the \\`input\\` argument to be of type \\`Uint8Array\\` or \\`ArrayBuffer\\`, got \\`${typeof input}\\``);\n\t\t}\n\n\t\tconst buffer = input instanceof Uint8Array ? input : new Uint8Array(input);\n\n\t\tif (!(buffer?.length > 1)) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.fromTokenizer(strtok3.fromBuffer(buffer, this.tokenizerOptions));\n\t}\n\n\tasync fromBlob(blob) {\n\t\treturn this.fromStream(blob.stream());\n\t}\n\n\tasync fromStream(stream) {\n\t\tconst tokenizer = await strtok3.fromWebStream(stream, this.tokenizerOptions);\n\t\ttry {\n\t\t\treturn await this.fromTokenizer(tokenizer);\n\t\t} finally {\n\t\t\tawait tokenizer.close();\n\t\t}\n\t}\n\n\tasync toDetectionStream(stream, options) {\n\t\tconst {sampleSize = reasonableDetectionSizeInBytes} = options;\n\t\tlet detectedFileType;\n\t\tlet firstChunk;\n\n\t\tconst reader = stream.getReader({mode: 'byob'});\n\t\ttry {\n\t\t\t// Read the first chunk from the stream\n\t\t\tconst {value: chunk, done} = await reader.read(new Uint8Array(sampleSize));\n\t\t\tfirstChunk = chunk;\n\t\t\tif (!done && chunk) {\n\t\t\t\ttry {\n\t\t\t\t\t// Attempt to detect the file type from the chunk\n\t\t\t\t\tdetectedFileType = await this.fromBuffer(chunk.subarray(0, sampleSize));\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!(error instanceof strtok3.EndOfStreamError)) {\n\t\t\t\t\t\tthrow error; // Re-throw non-EndOfStreamError\n\t\t\t\t\t}\n\n\t\t\t\t\tdetectedFileType = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirstChunk = chunk;\n\t\t} finally {\n\t\t\treader.releaseLock(); // Ensure the reader is released\n\t\t}\n\n\t\t// Create a new ReadableStream to manage locking issues\n\t\tconst transformStream = new TransformStream({\n\t\t\tasync start(controller) {\n\t\t\t\tcontroller.enqueue(firstChunk); // Enqueue the initial chunk\n\t\t\t},\n\t\t\ttransform(chunk, controller) {\n\t\t\t\t// Pass through the chunks without modification\n\t\t\t\tcontroller.enqueue(chunk);\n\t\t\t},\n\t\t});\n\n\t\tconst newStream = stream.pipeThrough(transformStream);\n\t\tnewStream.fileType = detectedFileType;\n\n\t\treturn newStream;\n\t}\n\n\tcheck(header, options) {\n\t\treturn _check(this.buffer, header, options);\n\t}\n\n\tcheckString(header, options) {\n\t\treturn this.check(stringToBytes(header), options);\n\t}\n\n\t// Detections with a high degree of certainty in identifying the correct file type\n\tdetectConfident = async tokenizer => {\n\t\tthis.buffer = new Uint8Array(reasonableDetectionSizeInBytes);\n\n\t\t// Keep reading until EOF if the file size is unknown.\n\t\tif (tokenizer.fileInfo.size === undefined) {\n\t\t\ttokenizer.fileInfo.size = Number.MAX_SAFE_INTEGER;\n\t\t}\n\n\t\tthis.tokenizer = tokenizer;\n\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: 12, mayBeLess: true});\n\n\t\t// -- 2-byte signatures --\n\n\t\tif (this.check([0x42, 0x4D])) {\n\t\t\treturn {\n\t\t\t\text: 'bmp',\n\t\t\t\tmime: 'image/bmp',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x0B, 0x77])) {\n\t\t\treturn {\n\t\t\t\text: 'ac3',\n\t\t\t\tmime: 'audio/vnd.dolby.dd-raw',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x78, 0x01])) {\n\t\t\treturn {\n\t\t\t\text: 'dmg',\n\t\t\t\tmime: 'application/x-apple-diskimage',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x4D, 0x5A])) {\n\t\t\treturn {\n\t\t\t\text: 'exe',\n\t\t\t\tmime: 'application/x-msdownload',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x25, 0x21])) {\n\t\t\tawait tokenizer.peekBuffer(this.buffer, {length: 24, mayBeLess: true});\n\n\t\t\tif (\n\t\t\t\tthis.checkString('PS-Adobe-', {offset: 2})\n\t\t\t\t&& this.checkString(' EPSF-', {offset: 14})\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'eps',\n\t\t\t\t\tmime: 'application/eps',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\text: 'ps',\n\t\t\t\tmime: 'application/postscript',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0x1F, 0xA0])\n\t\t\t|| this.check([0x1F, 0x9D])\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'Z',\n\t\t\t\tmime: 'application/x-compress',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xC7, 0x71])) {\n\t\t\treturn {\n\t\t\t\text: 'cpio',\n\t\t\t\tmime: 'application/x-cpio',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x60, 0xEA])) {\n\t\t\treturn {\n\t\t\t\text: 'arj',\n\t\t\t\tmime: 'application/x-arj',\n\t\t\t};\n\t\t}\n\n\t\t// -- 3-byte signatures --\n\n\t\tif (this.check([0xEF, 0xBB, 0xBF])) { // UTF-8-BOM\n\t\t\t// Strip off UTF-8-BOM\n\t\t\tthis.tokenizer.ignore(3);\n\t\t\treturn this.detectConfident(tokenizer);\n\t\t}\n\n\t\tif (this.check([0x47, 0x49, 0x46])) {\n\t\t\treturn {\n\t\t\t\text: 'gif',\n\t\t\t\tmime: 'image/gif',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x49, 0x49, 0xBC])) {\n\t\t\treturn {\n\t\t\t\text: 'jxr',\n\t\t\t\tmime: 'image/vnd.ms-photo',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x1F, 0x8B, 0x8])) {\n\t\t\treturn {\n\t\t\t\text: 'gz',\n\t\t\t\tmime: 'application/gzip',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x42, 0x5A, 0x68])) {\n\t\t\treturn {\n\t\t\t\text: 'bz2',\n\t\t\t\tmime: 'application/x-bzip2',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('ID3')) {\n\t\t\tawait tokenizer.ignore(6); // Skip ID3 header until the header size\n\t\t\tconst id3HeaderLength = await tokenizer.readToken(uint32SyncSafeToken);\n\t\t\tif (tokenizer.position + id3HeaderLength > tokenizer.fileInfo.size) {\n\t\t\t\t// Guess file type based on ID3 header for backward compatibility\n\t\t\t\treturn {\n\t\t\t\t\text: 'mp3',\n\t\t\t\t\tmime: 'audio/mpeg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tawait tokenizer.ignore(id3HeaderLength);\n\t\t\treturn this.fromTokenizer(tokenizer); // Skip ID3 header, recursion\n\t\t}\n\n\t\t// Musepack, SV7\n\t\tif (this.checkString('MP+')) {\n\t\t\treturn {\n\t\t\t\text: 'mpc',\n\t\t\t\tmime: 'audio/x-musepack',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\t(this.buffer[0] === 0x43 || this.buffer[0] === 0x46)\n\t\t\t&& this.check([0x57, 0x53], {offset: 1})\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'swf',\n\t\t\t\tmime: 'application/x-shockwave-flash',\n\t\t\t};\n\t\t}\n\n\t\t// -- 4-byte signatures --\n\n\t\t// Requires a sample size of 4 bytes\n\t\tif (this.check([0xFF, 0xD8, 0xFF])) {\n\t\t\tif (this.check([0xF7], {offset: 3})) { // JPG7/SOF55, indicating a ISO/IEC 14495 / JPEG-LS file\n\t\t\t\treturn {\n\t\t\t\t\text: 'jls',\n\t\t\t\t\tmime: 'image/jls',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\text: 'jpg',\n\t\t\t\tmime: 'image/jpeg',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x4F, 0x62, 0x6A, 0x01])) {\n\t\t\treturn {\n\t\t\t\text: 'avro',\n\t\t\t\tmime: 'application/avro',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('FLIF')) {\n\t\t\treturn {\n\t\t\t\text: 'flif',\n\t\t\t\tmime: 'image/flif',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('8BPS')) {\n\t\t\treturn {\n\t\t\t\text: 'psd',\n\t\t\t\tmime: 'image/vnd.adobe.photoshop',\n\t\t\t};\n\t\t}\n\n\t\t// Musepack, SV8\n\t\tif (this.checkString('MPCK')) {\n\t\t\treturn {\n\t\t\t\text: 'mpc',\n\t\t\t\tmime: 'audio/x-musepack',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('FORM')) {\n\t\t\treturn {\n\t\t\t\text: 'aif',\n\t\t\t\tmime: 'audio/aiff',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('icns', {offset: 0})) {\n\t\t\treturn {\n\t\t\t\text: 'icns',\n\t\t\t\tmime: 'image/icns',\n\t\t\t};\n\t\t}\n\n\t\t// Zip-based file formats\n\t\t// Need to be before the `zip` check\n\t\tif (this.check([0x50, 0x4B, 0x3, 0x4])) { // Local file header signature\n\t\t\tlet fileType;\n\t\t\tawait new ZipHandler(tokenizer).unzip(zipHeader => {\n\t\t\t\tswitch (zipHeader.filename) {\n\t\t\t\t\tcase 'META-INF/mozilla.rsa':\n\t\t\t\t\t\tfileType = {\n\t\t\t\t\t\t\text: 'xpi',\n\t\t\t\t\t\t\tmime: 'application/x-xpinstall',\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tstop: true,\n\t\t\t\t\t\t};\n\t\t\t\t\tcase 'META-INF/MANIFEST.MF':\n\t\t\t\t\t\tfileType = {\n\t\t\t\t\t\t\text: 'jar',\n\t\t\t\t\t\t\tmime: 'application/java-archive',\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tstop: true,\n\t\t\t\t\t\t};\n\t\t\t\t\tcase 'mimetype':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tasync handler(fileData) {\n\t\t\t\t\t\t\t\t// Use TextDecoder to decode the UTF-8 encoded data\n\t\t\t\t\t\t\t\tconst mimeType = new TextDecoder('utf-8').decode(fileData).trim();\n\t\t\t\t\t\t\t\tfileType = getFileTypeFromMimeType(mimeType);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstop: true,\n\t\t\t\t\t\t};\n\n\t\t\t\t\tcase '[Content_Types].xml':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tasync handler(fileData) {\n\t\t\t\t\t\t\t\t// Use TextDecoder to decode the UTF-8 encoded data\n\t\t\t\t\t\t\t\tlet xmlContent = new TextDecoder('utf-8').decode(fileData);\n\t\t\t\t\t\t\t\tconst endPos = xmlContent.indexOf('.main+xml\"');\n\t\t\t\t\t\t\t\tif (endPos === -1) {\n\t\t\t\t\t\t\t\t\tconst mimeType = 'application/vnd.ms-package.3dmanufacturing-3dmodel+xml';\n\t\t\t\t\t\t\t\t\tif (xmlContent.includes(`ContentType=\"${mimeType}\"`)) {\n\t\t\t\t\t\t\t\t\t\tfileType = getFileTypeFromMimeType(mimeType);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\txmlContent = xmlContent.slice(0, Math.max(0, endPos));\n\t\t\t\t\t\t\t\t\tconst firstPos = xmlContent.lastIndexOf('\"');\n\t\t\t\t\t\t\t\t\tconst mimeType = xmlContent.slice(Math.max(0, firstPos + 1));\n\t\t\t\t\t\t\t\t\tfileType = getFileTypeFromMimeType(mimeType);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstop: true,\n\t\t\t\t\t\t};\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (/classes\\d*\\.dex/.test(zipHeader.filename)) {\n\t\t\t\t\t\t\tfileType = {\n\t\t\t\t\t\t\t\text: 'apk',\n\t\t\t\t\t\t\t\tmime: 'application/vnd.android.package-archive',\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\treturn {stop: true};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {};\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn fileType ?? {\n\t\t\t\text: 'zip',\n\t\t\t\tmime: 'application/zip',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('OggS')) {\n\t\t\t// This is an OGG container\n\t\t\tawait tokenizer.ignore(28);\n\t\t\tconst type = new Uint8Array(8);\n\t\t\tawait tokenizer.readBuffer(type);\n\n\t\t\t// Needs to be before `ogg` check\n\t\t\tif (_check(type, [0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'opus',\n\t\t\t\t\tmime: 'audio/ogg; codecs=opus',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If ' theora' in header.\n\t\t\tif (_check(type, [0x80, 0x74, 0x68, 0x65, 0x6F, 0x72, 0x61])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ogv',\n\t\t\t\t\tmime: 'video/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If '\\x01video' in header.\n\t\t\tif (_check(type, [0x01, 0x76, 0x69, 0x64, 0x65, 0x6F, 0x00])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ogm',\n\t\t\t\t\tmime: 'video/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If ' FLAC' in header  https://xiph.org/flac/faq.html\n\t\t\tif (_check(type, [0x7F, 0x46, 0x4C, 0x41, 0x43])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'oga',\n\t\t\t\t\tmime: 'audio/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// 'Speex  ' in header https://en.wikipedia.org/wiki/Speex\n\t\t\tif (_check(type, [0x53, 0x70, 0x65, 0x65, 0x78, 0x20, 0x20])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'spx',\n\t\t\t\t\tmime: 'audio/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// If '\\x01vorbis' in header\n\t\t\tif (_check(type, [0x01, 0x76, 0x6F, 0x72, 0x62, 0x69, 0x73])) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ogg',\n\t\t\t\t\tmime: 'audio/ogg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Default OGG container https://www.iana.org/assignments/media-types/application/ogg\n\t\t\treturn {\n\t\t\t\text: 'ogx',\n\t\t\t\tmime: 'application/ogg',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0x50, 0x4B])\n\t\t\t&& (this.buffer[2] === 0x3 || this.buffer[2] === 0x5 || this.buffer[2] === 0x7)\n\t\t\t&& (this.buffer[3] === 0x4 || this.buffer[3] === 0x6 || this.buffer[3] === 0x8)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'zip',\n\t\t\t\tmime: 'application/zip',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('MThd')) {\n\t\t\treturn {\n\t\t\t\text: 'mid',\n\t\t\t\tmime: 'audio/midi',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('wOFF')\n\t\t\t&& (\n\t\t\t\tthis.check([0x00, 0x01, 0x00, 0x00], {offset: 4})\n\t\t\t\t|| this.checkString('OTTO', {offset: 4})\n\t\t\t)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'woff',\n\t\t\t\tmime: 'font/woff',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('wOF2')\n\t\t\t&& (\n\t\t\t\tthis.check([0x00, 0x01, 0x00, 0x00], {offset: 4})\n\t\t\t\t|| this.checkString('OTTO', {offset: 4})\n\t\t\t)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'woff2',\n\t\t\t\tmime: 'font/woff2',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xD4, 0xC3, 0xB2, 0xA1]) || this.check([0xA1, 0xB2, 0xC3, 0xD4])) {\n\t\t\treturn {\n\t\t\t\text: 'pcap',\n\t\t\t\tmime: 'application/vnd.tcpdump.pcap',\n\t\t\t};\n\t\t}\n\n\t\t// Sony DSD Stream File (DSF)\n\t\tif (this.checkString('DSD ')) {\n\t\t\treturn {\n\t\t\t\text: 'dsf',\n\t\t\t\tmime: 'audio/x-dsf', // Non-standard\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('LZIP')) {\n\t\t\treturn {\n\t\t\t\text: 'lz',\n\t\t\t\tmime: 'application/x-lzip',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('fLaC')) {\n\t\t\treturn {\n\t\t\t\text: 'flac',\n\t\t\t\tmime: 'audio/flac',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x42, 0x50, 0x47, 0xFB])) {\n\t\t\treturn {\n\t\t\t\text: 'bpg',\n\t\t\t\tmime: 'image/bpg',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('wvpk')) {\n\t\t\treturn {\n\t\t\t\text: 'wv',\n\t\t\t\tmime: 'audio/wavpack',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('%PDF')) {\n\t\t\t// Assume this is just a normal PDF\n\t\t\treturn {\n\t\t\t\text: 'pdf',\n\t\t\t\tmime: 'application/pdf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x61, 0x73, 0x6D])) {\n\t\t\treturn {\n\t\t\t\text: 'wasm',\n\t\t\t\tmime: 'application/wasm',\n\t\t\t};\n\t\t}\n\n\t\t// TIFF, little-endian type\n\t\tif (this.check([0x49, 0x49])) {\n\t\t\tconst fileType = await this.readTiffHeader(false);\n\t\t\tif (fileType) {\n\t\t\t\treturn fileType;\n\t\t\t}\n\t\t}\n\n\t\t// TIFF, big-endian type\n\t\tif (this.check([0x4D, 0x4D])) {\n\t\t\tconst fileType = await this.readTiffHeader(true);\n\t\t\tif (fileType) {\n\t\t\t\treturn fileType;\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('MAC ')) {\n\t\t\treturn {\n\t\t\t\text: 'ape',\n\t\t\t\tmime: 'audio/ape',\n\t\t\t};\n\t\t}\n\n\t\t// https://github.com/file/file/blob/master/magic/Magdir/matroska\n\t\tif (this.check([0x1A, 0x45, 0xDF, 0xA3])) { // Root element: EBML\n\t\t\tasync function readField() {\n\t\t\t\tconst msb = await tokenizer.peekNumber(Token.UINT8);\n\t\t\t\tlet mask = 0x80;\n\t\t\t\tlet ic = 0; // 0 = A, 1 = B, 2 = C, 3 = D\n\n\t\t\t\twhile ((msb & mask) === 0 && mask !== 0) {\n\t\t\t\t\t++ic;\n\t\t\t\t\tmask >>= 1;\n\t\t\t\t}\n\n\t\t\t\tconst id = new Uint8Array(ic + 1);\n\t\t\t\tawait tokenizer.readBuffer(id);\n\t\t\t\treturn id;\n\t\t\t}\n\n\t\t\tasync function readElement() {\n\t\t\t\tconst idField = await readField();\n\t\t\t\tconst lengthField = await readField();\n\n\t\t\t\tlengthField[0] ^= 0x80 >> (lengthField.length - 1);\n\t\t\t\tconst nrLength = Math.min(6, lengthField.length); // JavaScript can max read 6 bytes integer\n\n\t\t\t\tconst idView = new DataView(idField.buffer);\n\t\t\t\tconst lengthView = new DataView(lengthField.buffer, lengthField.length - nrLength, nrLength);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: getUintBE(idView),\n\t\t\t\t\tlen: getUintBE(lengthView),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tasync function readChildren(children) {\n\t\t\t\twhile (children > 0) {\n\t\t\t\t\tconst element = await readElement();\n\t\t\t\t\tif (element.id === 0x42_82) {\n\t\t\t\t\t\tconst rawValue = await tokenizer.readToken(new Token.StringType(element.len));\n\t\t\t\t\t\treturn rawValue.replaceAll(/\\00.*$/g, ''); // Return DocType\n\t\t\t\t\t}\n\n\t\t\t\t\tawait tokenizer.ignore(element.len); // ignore payload\n\t\t\t\t\t--children;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst re = await readElement();\n\t\t\tconst documentType = await readChildren(re.len);\n\n\t\t\tswitch (documentType) {\n\t\t\t\tcase 'webm':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'webm',\n\t\t\t\t\t\tmime: 'video/webm',\n\t\t\t\t\t};\n\n\t\t\t\tcase 'matroska':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'mkv',\n\t\t\t\t\t\tmime: 'video/matroska',\n\t\t\t\t\t};\n\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('SQLi')) {\n\t\t\treturn {\n\t\t\t\text: 'sqlite',\n\t\t\t\tmime: 'application/x-sqlite3',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x4E, 0x45, 0x53, 0x1A])) {\n\t\t\treturn {\n\t\t\t\text: 'nes',\n\t\t\t\tmime: 'application/x-nintendo-nes-rom',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('Cr24')) {\n\t\t\treturn {\n\t\t\t\text: 'crx',\n\t\t\t\tmime: 'application/x-google-chrome-extension',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('MSCF')\n\t\t\t|| this.checkString('ISc(')\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'cab',\n\t\t\t\tmime: 'application/vnd.ms-cab-compressed',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xED, 0xAB, 0xEE, 0xDB])) {\n\t\t\treturn {\n\t\t\t\text: 'rpm',\n\t\t\t\tmime: 'application/x-rpm',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xC5, 0xD0, 0xD3, 0xC6])) {\n\t\t\treturn {\n\t\t\t\text: 'eps',\n\t\t\t\tmime: 'application/eps',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x28, 0xB5, 0x2F, 0xFD])) {\n\t\t\treturn {\n\t\t\t\text: 'zst',\n\t\t\t\tmime: 'application/zstd',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x7F, 0x45, 0x4C, 0x46])) {\n\t\t\treturn {\n\t\t\t\text: 'elf',\n\t\t\t\tmime: 'application/x-elf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x21, 0x42, 0x44, 0x4E])) {\n\t\t\treturn {\n\t\t\t\text: 'pst',\n\t\t\t\tmime: 'application/vnd.ms-outlook',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('PAR1') || this.checkString('PARE')) {\n\t\t\treturn {\n\t\t\t\text: 'parquet',\n\t\t\t\tmime: 'application/vnd.apache.parquet',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('ttcf')) {\n\t\t\treturn {\n\t\t\t\text: 'ttc',\n\t\t\t\tmime: 'font/collection',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xCF, 0xFA, 0xED, 0xFE])) {\n\t\t\treturn {\n\t\t\t\text: 'macho',\n\t\t\t\tmime: 'application/x-mach-binary',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x04, 0x22, 0x4D, 0x18])) {\n\t\t\treturn {\n\t\t\t\text: 'lz4',\n\t\t\t\tmime: 'application/x-lz4', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\t// -- 5-byte signatures --\n\n\t\tif (this.check([0x4F, 0x54, 0x54, 0x4F, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'otf',\n\t\t\t\tmime: 'font/otf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('#!AMR')) {\n\t\t\treturn {\n\t\t\t\text: 'amr',\n\t\t\t\tmime: 'audio/amr',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('{\\\\rtf')) {\n\t\t\treturn {\n\t\t\t\text: 'rtf',\n\t\t\t\tmime: 'application/rtf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x46, 0x4C, 0x56, 0x01])) {\n\t\t\treturn {\n\t\t\t\text: 'flv',\n\t\t\t\tmime: 'video/x-flv',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('IMPM')) {\n\t\t\treturn {\n\t\t\t\text: 'it',\n\t\t\t\tmime: 'audio/x-it',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('-lh0-', {offset: 2})\n\t\t\t|| this.checkString('-lh1-', {offset: 2})\n\t\t\t|| this.checkString('-lh2-', {offset: 2})\n\t\t\t|| this.checkString('-lh3-', {offset: 2})\n\t\t\t|| this.checkString('-lh4-', {offset: 2})\n\t\t\t|| this.checkString('-lh5-', {offset: 2})\n\t\t\t|| this.checkString('-lh6-', {offset: 2})\n\t\t\t|| this.checkString('-lh7-', {offset: 2})\n\t\t\t|| this.checkString('-lzs-', {offset: 2})\n\t\t\t|| this.checkString('-lz4-', {offset: 2})\n\t\t\t|| this.checkString('-lz5-', {offset: 2})\n\t\t\t|| this.checkString('-lhd-', {offset: 2})\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'lzh',\n\t\t\t\tmime: 'application/x-lzh-compressed',\n\t\t\t};\n\t\t}\n\n\t\t// MPEG program stream (PS or MPEG-PS)\n\t\tif (this.check([0x00, 0x00, 0x01, 0xBA])) {\n\t\t\t//  MPEG-PS, MPEG-1 Part 1\n\t\t\tif (this.check([0x21], {offset: 4, mask: [0xF1]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mpg', // May also be .ps, .mpeg\n\t\t\t\t\tmime: 'video/MP1S',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// MPEG-PS, MPEG-2 Part 1\n\t\t\tif (this.check([0x44], {offset: 4, mask: [0xC4]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mpg', // May also be .mpg, .m2p, .vob or .sub\n\t\t\t\t\tmime: 'video/MP2P',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('ITSF')) {\n\t\t\treturn {\n\t\t\t\text: 'chm',\n\t\t\t\tmime: 'application/vnd.ms-htmlhelp',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xCA, 0xFE, 0xBA, 0xBE])) {\n\t\t\treturn {\n\t\t\t\text: 'class',\n\t\t\t\tmime: 'application/java-vm',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('.RMF')) {\n\t\t\treturn {\n\t\t\t\text: 'rm',\n\t\t\t\tmime: 'application/vnd.rn-realmedia',\n\t\t\t};\n\t\t}\n\n\t\t// -- 5-byte signatures --\n\n\t\tif (this.checkString('DRACO')) {\n\t\t\treturn {\n\t\t\t\text: 'drc',\n\t\t\t\tmime: 'application/vnd.google.draco', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\t// -- 6-byte signatures --\n\n\t\tif (this.check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'xz',\n\t\t\t\tmime: 'application/x-xz',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('<?xml ')) {\n\t\t\treturn {\n\t\t\t\text: 'xml',\n\t\t\t\tmime: 'application/xml',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) {\n\t\t\treturn {\n\t\t\t\text: '7z',\n\t\t\t\tmime: 'application/x-7z-compressed',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7])\n\t\t\t&& (this.buffer[6] === 0x0 || this.buffer[6] === 0x1)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'rar',\n\t\t\t\tmime: 'application/x-rar-compressed',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('solid ')) {\n\t\t\treturn {\n\t\t\t\text: 'stl',\n\t\t\t\tmime: 'model/stl',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('AC')) {\n\t\t\tconst version = new Token.StringType(4, 'latin1').get(this.buffer, 2);\n\t\t\tif (version.match('^d*') && version >= 1000 && version <= 1050) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'dwg',\n\t\t\t\t\tmime: 'image/vnd.dwg',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (this.checkString('070707')) {\n\t\t\treturn {\n\t\t\t\text: 'cpio',\n\t\t\t\tmime: 'application/x-cpio',\n\t\t\t};\n\t\t}\n\n\t\t// -- 7-byte signatures --\n\n\t\tif (this.checkString('BLENDER')) {\n\t\t\treturn {\n\t\t\t\text: 'blend',\n\t\t\t\tmime: 'application/x-blender',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('!<arch>')) {\n\t\t\tawait tokenizer.ignore(8);\n\t\t\tconst string = await tokenizer.readToken(new Token.StringType(13, 'ascii'));\n\t\t\tif (string === 'debian-binary') {\n\t\t\t\treturn {\n\t\t\t\t\text: 'deb',\n\t\t\t\t\tmime: 'application/x-deb',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\text: 'ar',\n\t\t\t\tmime: 'application/x-unix-archive',\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.checkString('WEBVTT')\n\t\t\t&&\t(\n\t\t\t\t// One of LF, CR, tab, space, or end of file must follow \"WEBVTT\" per the spec (see `fixture/fixture-vtt-*.vtt` for examples). Note that `\\0` is technically the null character (there is no such thing as an EOF character). However, checking for `\\0` gives us the same result as checking for the end of the stream.\n\t\t\t\t(['\\n', '\\r', '\\t', ' ', '\\0'].some(char7 => this.checkString(char7, {offset: 6}))))\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'vtt',\n\t\t\t\tmime: 'text/vtt',\n\t\t\t};\n\t\t}\n\n\t\t// -- 8-byte signatures --\n\n\t\tif (this.check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\t\t// APNG format (https://wiki.mozilla.org/APNG_Specification)\n\t\t\t// 1. Find the first IDAT (image data) chunk (49 44 41 54)\n\t\t\t// 2. Check if there is an \"acTL\" chunk before the IDAT one (61 63 54 4C)\n\n\t\t\t// Offset calculated as follows:\n\t\t\t// - 8 bytes: PNG signature\n\t\t\t// - 4 (length) + 4 (chunk type) + 13 (chunk data) + 4 (CRC): IHDR chunk\n\n\t\t\tawait tokenizer.ignore(8); // ignore PNG signature\n\n\t\t\tasync function readChunkHeader() {\n\t\t\t\treturn {\n\t\t\t\t\tlength: await tokenizer.readToken(Token.INT32_BE),\n\t\t\t\t\ttype: await tokenizer.readToken(new Token.StringType(4, 'latin1')),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tdo {\n\t\t\t\tconst chunk = await readChunkHeader();\n\t\t\t\tif (chunk.length < 0) {\n\t\t\t\t\treturn; // Invalid chunk length\n\t\t\t\t}\n\n\t\t\t\tswitch (chunk.type) {\n\t\t\t\t\tcase 'IDAT':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'png',\n\t\t\t\t\t\t\tmime: 'image/png',\n\t\t\t\t\t\t};\n\t\t\t\t\tcase 'acTL':\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'apng',\n\t\t\t\t\t\t\tmime: 'image/apng',\n\t\t\t\t\t\t};\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tawait tokenizer.ignore(chunk.length + 4); // Ignore chunk-data + CRC\n\t\t\t\t}\n\t\t\t} while (tokenizer.position + 8 < tokenizer.fileInfo.size);\n\n\t\t\treturn {\n\t\t\t\text: 'png',\n\t\t\t\tmime: 'image/png',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x41, 0x52, 0x52, 0x4F, 0x57, 0x31, 0x00, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'arrow',\n\t\t\t\tmime: 'application/vnd.apache.arrow.file',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x67, 0x6C, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'glb',\n\t\t\t\tmime: 'model/gltf-binary',\n\t\t\t};\n\t\t}\n\n\t\t// `mov` format variants\n\t\tif (\n\t\t\tthis.check([0x66, 0x72, 0x65, 0x65], {offset: 4}) // `free`\n\t\t\t|| this.check([0x6D, 0x64, 0x61, 0x74], {offset: 4}) // `mdat` MJPEG\n\t\t\t|| this.check([0x6D, 0x6F, 0x6F, 0x76], {offset: 4}) // `moov`\n\t\t\t|| this.check([0x77, 0x69, 0x64, 0x65], {offset: 4}) // `wide`\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mov',\n\t\t\t\tmime: 'video/quicktime',\n\t\t\t};\n\t\t}\n\n\t\t// -- 9-byte signatures --\n\n\t\tif (this.check([0x49, 0x49, 0x52, 0x4F, 0x08, 0x00, 0x00, 0x00, 0x18])) {\n\t\t\treturn {\n\t\t\t\text: 'orf',\n\t\t\t\tmime: 'image/x-olympus-orf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('gimp xcf ')) {\n\t\t\treturn {\n\t\t\t\text: 'xcf',\n\t\t\t\tmime: 'image/x-xcf',\n\t\t\t};\n\t\t}\n\n\t\t// File Type Box (https://en.wikipedia.org/wiki/ISO_base_media_file_format)\n\t\t// It's not required to be first, but it's recommended to be. Almost all ISO base media files start with `ftyp` box.\n\t\t// `ftyp` box must contain a brand major identifier, which must consist of ISO 8859-1 printable characters.\n\t\t// Here we check for 8859-1 printable characters (for simplicity, it's a mask which also catches one non-printable character).\n\t\tif (\n\t\t\tthis.checkString('ftyp', {offset: 4})\n\t\t\t&& (this.buffer[8] & 0x60) !== 0x00 // Brand major, first character ASCII?\n\t\t) {\n\t\t\t// They all can have MIME `video/mp4` except `application/mp4` special-case which is hard to detect.\n\t\t\t// For some cases, we're specific, everything else falls to `video/mp4` with `mp4` extension.\n\t\t\tconst brandMajor = new Token.StringType(4, 'latin1').get(this.buffer, 8).replace('\\0', ' ').trim();\n\t\t\tswitch (brandMajor) {\n\t\t\t\tcase 'avif':\n\t\t\t\tcase 'avis':\n\t\t\t\t\treturn {ext: 'avif', mime: 'image/avif'};\n\t\t\t\tcase 'mif1':\n\t\t\t\t\treturn {ext: 'heic', mime: 'image/heif'};\n\t\t\t\tcase 'msf1':\n\t\t\t\t\treturn {ext: 'heic', mime: 'image/heif-sequence'};\n\t\t\t\tcase 'heic':\n\t\t\t\tcase 'heix':\n\t\t\t\t\treturn {ext: 'heic', mime: 'image/heic'};\n\t\t\t\tcase 'hevc':\n\t\t\t\tcase 'hevx':\n\t\t\t\t\treturn {ext: 'heic', mime: 'image/heic-sequence'};\n\t\t\t\tcase 'qt':\n\t\t\t\t\treturn {ext: 'mov', mime: 'video/quicktime'};\n\t\t\t\tcase 'M4V':\n\t\t\t\tcase 'M4VH':\n\t\t\t\tcase 'M4VP':\n\t\t\t\t\treturn {ext: 'm4v', mime: 'video/x-m4v'};\n\t\t\t\tcase 'M4P':\n\t\t\t\t\treturn {ext: 'm4p', mime: 'video/mp4'};\n\t\t\t\tcase 'M4B':\n\t\t\t\t\treturn {ext: 'm4b', mime: 'audio/mp4'};\n\t\t\t\tcase 'M4A':\n\t\t\t\t\treturn {ext: 'm4a', mime: 'audio/x-m4a'};\n\t\t\t\tcase 'F4V':\n\t\t\t\t\treturn {ext: 'f4v', mime: 'video/mp4'};\n\t\t\t\tcase 'F4P':\n\t\t\t\t\treturn {ext: 'f4p', mime: 'video/mp4'};\n\t\t\t\tcase 'F4A':\n\t\t\t\t\treturn {ext: 'f4a', mime: 'audio/mp4'};\n\t\t\t\tcase 'F4B':\n\t\t\t\t\treturn {ext: 'f4b', mime: 'audio/mp4'};\n\t\t\t\tcase 'crx':\n\t\t\t\t\treturn {ext: 'cr3', mime: 'image/x-canon-cr3'};\n\t\t\t\tdefault:\n\t\t\t\t\tif (brandMajor.startsWith('3g')) {\n\t\t\t\t\t\tif (brandMajor.startsWith('3g2')) {\n\t\t\t\t\t\t\treturn {ext: '3g2', mime: 'video/3gpp2'};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {ext: '3gp', mime: 'video/3gpp'};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {ext: 'mp4', mime: 'video/mp4'};\n\t\t\t}\n\t\t}\n\n\t\t// -- 12-byte signatures --\n\n\t\t// RIFF file format which might be AVI, WAV, QCP, etc\n\t\tif (this.check([0x52, 0x49, 0x46, 0x46])) {\n\t\t\tif (this.checkString('WEBP', {offset: 8})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'webp',\n\t\t\t\t\tmime: 'image/webp',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.check([0x41, 0x56, 0x49], {offset: 8})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'avi',\n\t\t\t\t\tmime: 'video/vnd.avi',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.check([0x57, 0x41, 0x56, 0x45], {offset: 8})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'wav',\n\t\t\t\t\tmime: 'audio/wav',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// QLCM, QCP file\n\t\t\tif (this.check([0x51, 0x4C, 0x43, 0x4D], {offset: 8})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'qcp',\n\t\t\t\t\tmime: 'audio/qcelp',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif (this.check([0x49, 0x49, 0x55, 0x00, 0x18, 0x00, 0x00, 0x00, 0x88, 0xE7, 0x74, 0xD8])) {\n\t\t\treturn {\n\t\t\t\text: 'rw2',\n\t\t\t\tmime: 'image/x-panasonic-rw2',\n\t\t\t};\n\t\t}\n\n\t\t// ASF_Header_Object first 80 bytes\n\t\tif (this.check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) {\n\t\t\tasync function readHeader() {\n\t\t\t\tconst guid = new Uint8Array(16);\n\t\t\t\tawait tokenizer.readBuffer(guid);\n\t\t\t\treturn {\n\t\t\t\t\tid: guid,\n\t\t\t\t\tsize: Number(await tokenizer.readToken(Token.UINT64_LE)),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tawait tokenizer.ignore(30);\n\t\t\t// Search for header should be in first 1KB of file.\n\t\t\twhile (tokenizer.position + 24 < tokenizer.fileInfo.size) {\n\t\t\t\tconst header = await readHeader();\n\t\t\t\tlet payload = header.size - 24;\n\t\t\t\tif (_check(header.id, [0x91, 0x07, 0xDC, 0xB7, 0xB7, 0xA9, 0xCF, 0x11, 0x8E, 0xE6, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65])) {\n\t\t\t\t\t// Sync on Stream-Properties-Object (B7DC0791-A9B7-11CF-8EE6-00C00C205365)\n\t\t\t\t\tconst typeId = new Uint8Array(16);\n\t\t\t\t\tpayload -= await tokenizer.readBuffer(typeId);\n\n\t\t\t\t\tif (_check(typeId, [0x40, 0x9E, 0x69, 0xF8, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {\n\t\t\t\t\t\t// Found audio:\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'asf',\n\t\t\t\t\t\t\tmime: 'audio/x-ms-asf',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tif (_check(typeId, [0xC0, 0xEF, 0x19, 0xBC, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B])) {\n\t\t\t\t\t\t// Found video:\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'asf',\n\t\t\t\t\t\t\tmime: 'video/x-ms-asf',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tawait tokenizer.ignore(payload);\n\t\t\t}\n\n\t\t\t// Default to ASF generic extension\n\t\t\treturn {\n\t\t\t\text: 'asf',\n\t\t\t\tmime: 'application/vnd.ms-asf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\t\treturn {\n\t\t\t\text: 'ktx',\n\t\t\t\tmime: 'image/ktx',\n\t\t\t};\n\t\t}\n\n\t\tif ((this.check([0x7E, 0x10, 0x04]) || this.check([0x7E, 0x18, 0x04])) && this.check([0x30, 0x4D, 0x49, 0x45], {offset: 4})) {\n\t\t\treturn {\n\t\t\t\text: 'mie',\n\t\t\t\tmime: 'application/x-mie',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x27, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], {offset: 2})) {\n\t\t\treturn {\n\t\t\t\text: 'shp',\n\t\t\t\tmime: 'application/x-esri-shape',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xFF, 0x4F, 0xFF, 0x51])) {\n\t\t\treturn {\n\t\t\t\text: 'j2c',\n\t\t\t\tmime: 'image/j2c',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A])) {\n\t\t\t// JPEG-2000 family\n\n\t\t\tawait tokenizer.ignore(20);\n\t\t\tconst type = await tokenizer.readToken(new Token.StringType(4, 'ascii'));\n\t\t\tswitch (type) {\n\t\t\t\tcase 'jp2 ':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'jp2',\n\t\t\t\t\t\tmime: 'image/jp2',\n\t\t\t\t\t};\n\t\t\t\tcase 'jpx ':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'jpx',\n\t\t\t\t\t\tmime: 'image/jpx',\n\t\t\t\t\t};\n\t\t\t\tcase 'jpm ':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'jpm',\n\t\t\t\t\t\tmime: 'image/jpm',\n\t\t\t\t\t};\n\t\t\t\tcase 'mjp2':\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'mj2',\n\t\t\t\t\t\tmime: 'image/mj2',\n\t\t\t\t\t};\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0xFF, 0x0A])\n\t\t\t|| this.check([0x00, 0x00, 0x00, 0x0C, 0x4A, 0x58, 0x4C, 0x20, 0x0D, 0x0A, 0x87, 0x0A])\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'jxl',\n\t\t\t\tmime: 'image/jxl',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xFE, 0xFF])) { // UTF-16-BOM-LE\n\t\t\tif (this.check([0, 60, 0, 63, 0, 120, 0, 109, 0, 108], {offset: 2})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'xml',\n\t\t\t\t\tmime: 'application/xml',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn undefined; // Some unknown text based format\n\t\t}\n\n\t\tif (this.check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {\n\t\t\t// Detected Microsoft Compound File Binary File (MS-CFB) Format.\n\t\t\treturn {\n\t\t\t\text: 'cfb',\n\t\t\t\tmime: 'application/x-cfb',\n\t\t\t};\n\t\t}\n\n\t\t// Increase sample size from 12 to 256.\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: Math.min(256, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t\tif (this.check([0x61, 0x63, 0x73, 0x70], {offset: 36})) {\n\t\t\treturn {\n\t\t\t\text: 'icc',\n\t\t\t\tmime: 'application/vnd.iccprofile',\n\t\t\t};\n\t\t}\n\n\t\t// ACE: requires 14 bytes in the buffer\n\t\tif (this.checkString('**ACE', {offset: 7}) && this.checkString('**', {offset: 12})) {\n\t\t\treturn {\n\t\t\t\text: 'ace',\n\t\t\t\tmime: 'application/x-ace-compressed',\n\t\t\t};\n\t\t}\n\n\t\t// -- 15-byte signatures --\n\n\t\tif (this.checkString('BEGIN:')) {\n\t\t\tif (this.checkString('VCARD', {offset: 6})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'vcf',\n\t\t\t\t\tmime: 'text/vcard',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.checkString('VCALENDAR', {offset: 6})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'ics',\n\t\t\t\t\tmime: 'text/calendar',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// `raf` is here just to keep all the raw image detectors together.\n\t\tif (this.checkString('FUJIFILMCCD-RAW')) {\n\t\t\treturn {\n\t\t\t\text: 'raf',\n\t\t\t\tmime: 'image/x-fujifilm-raf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('Extended Module:')) {\n\t\t\treturn {\n\t\t\t\text: 'xm',\n\t\t\t\tmime: 'audio/x-xm',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('Creative Voice File')) {\n\t\t\treturn {\n\t\t\t\text: 'voc',\n\t\t\t\tmime: 'audio/x-voc',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x04, 0x00, 0x00, 0x00]) && this.buffer.length >= 16) { // Rough & quick check Pickle/ASAR\n\t\t\tconst jsonSize = new DataView(this.buffer.buffer).getUint32(12, true);\n\n\t\t\tif (jsonSize > 12 && this.buffer.length >= jsonSize + 16) {\n\t\t\t\ttry {\n\t\t\t\t\tconst header = new TextDecoder().decode(this.buffer.subarray(16, jsonSize + 16));\n\t\t\t\t\tconst json = JSON.parse(header);\n\t\t\t\t\t// Check if Pickle is ASAR\n\t\t\t\t\tif (json.files) { // Final check, assuring Pickle/ASAR format\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'asar',\n\t\t\t\t\t\t\tmime: 'application/x-asar',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t}\n\n\t\tif (this.check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) {\n\t\t\treturn {\n\t\t\t\text: 'mxf',\n\t\t\t\tmime: 'application/mxf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('SCRM', {offset: 44})) {\n\t\t\treturn {\n\t\t\t\text: 's3m',\n\t\t\t\tmime: 'audio/x-s3m',\n\t\t\t};\n\t\t}\n\n\t\t// Raw MPEG-2 transport stream (188-byte packets)\n\t\tif (this.check([0x47]) && this.check([0x47], {offset: 188})) {\n\t\t\treturn {\n\t\t\t\text: 'mts',\n\t\t\t\tmime: 'video/mp2t',\n\t\t\t};\n\t\t}\n\n\t\t// Blu-ray Disc Audio-Video (BDAV) MPEG-2 transport stream has 4-byte TP_extra_header before each 188-byte packet\n\t\tif (this.check([0x47], {offset: 4}) && this.check([0x47], {offset: 196})) {\n\t\t\treturn {\n\t\t\t\text: 'mts',\n\t\t\t\tmime: 'video/mp2t',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x42, 0x4F, 0x4F, 0x4B, 0x4D, 0x4F, 0x42, 0x49], {offset: 60})) {\n\t\t\treturn {\n\t\t\t\text: 'mobi',\n\t\t\t\tmime: 'application/x-mobipocket-ebook',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x44, 0x49, 0x43, 0x4D], {offset: 128})) {\n\t\t\treturn {\n\t\t\t\text: 'dcm',\n\t\t\t\tmime: 'application/dicom',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x4C, 0x00, 0x00, 0x00, 0x01, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46])) {\n\t\t\treturn {\n\t\t\t\text: 'lnk',\n\t\t\t\tmime: 'application/x.ms.shortcut', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x62, 0x6F, 0x6F, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x72, 0x6B, 0x00, 0x00, 0x00, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'alias',\n\t\t\t\tmime: 'application/x.apple.alias', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\tif (this.checkString('Kaydara FBX Binary  \\u0000')) {\n\t\t\treturn {\n\t\t\t\text: 'fbx',\n\t\t\t\tmime: 'application/x.autodesk.fbx', // Invented by us\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tthis.check([0x4C, 0x50], {offset: 34})\n\t\t\t&& (\n\t\t\t\tthis.check([0x00, 0x00, 0x01], {offset: 8})\n\t\t\t\t|| this.check([0x01, 0x00, 0x02], {offset: 8})\n\t\t\t\t|| this.check([0x02, 0x00, 0x02], {offset: 8})\n\t\t\t)\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'eot',\n\t\t\t\tmime: 'application/vnd.ms-fontobject',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x06, 0x06, 0xED, 0xF5, 0xD8, 0x1D, 0x46, 0xE5, 0xBD, 0x31, 0xEF, 0xE7, 0xFE, 0x74, 0xB7, 0x1D])) {\n\t\t\treturn {\n\t\t\t\text: 'indd',\n\t\t\t\tmime: 'application/x-indesign',\n\t\t\t};\n\t\t}\n\n\t\t// Increase sample size from 256 to 512\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: Math.min(512, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t\t// Requires a buffer size of 512 bytes\n\t\tif ((this.checkString('ustar', {offset: 257}) && (this.checkString('\\0', {offset: 262}) || this.checkString(' ', {offset: 262})))\n\t\t\t|| (this.check([0, 0, 0, 0, 0, 0], {offset: 257}) && tarHeaderChecksumMatches(this.buffer))) {\n\t\t\treturn {\n\t\t\t\text: 'tar',\n\t\t\t\tmime: 'application/x-tar',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0xFF, 0xFE])) { // UTF-16-BOM-BE\n\t\t\tif (this.check([60, 0, 63, 0, 120, 0, 109, 0, 108, 0], {offset: 2})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'xml',\n\t\t\t\t\tmime: 'application/xml',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (this.check([0xFF, 0x0E, 0x53, 0x00, 0x6B, 0x00, 0x65, 0x00, 0x74, 0x00, 0x63, 0x00, 0x68, 0x00, 0x55, 0x00, 0x70, 0x00, 0x20, 0x00, 0x4D, 0x00, 0x6F, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6C, 0x00], {offset: 2})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'skp',\n\t\t\t\t\tmime: 'application/vnd.sketchup.skp',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn undefined; // Some text based format\n\t\t}\n\n\t\tif (this.checkString('-----BEGIN PGP MESSAGE-----')) {\n\t\t\treturn {\n\t\t\t\text: 'pgp',\n\t\t\t\tmime: 'application/pgp-encrypted',\n\t\t\t};\n\t\t}\n\t};\n\t// Detections with limited supporting data, resulting in a higher likelihood of false positives\n\tdetectImprecise = async tokenizer => {\n\t\tthis.buffer = new Uint8Array(reasonableDetectionSizeInBytes);\n\n\t\t// Read initial sample size of 8 bytes\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: Math.min(8, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t\tif (\n\t\t\tthis.check([0x0, 0x0, 0x1, 0xBA])\n\t\t\t|| this.check([0x0, 0x0, 0x1, 0xB3])\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mpg',\n\t\t\t\tmime: 'video/mpeg',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x01, 0x00, 0x00, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'ttf',\n\t\t\t\tmime: 'font/ttf',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x00, 0x01, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'ico',\n\t\t\t\tmime: 'image/x-icon',\n\t\t\t};\n\t\t}\n\n\t\tif (this.check([0x00, 0x00, 0x02, 0x00])) {\n\t\t\treturn {\n\t\t\t\text: 'cur',\n\t\t\t\tmime: 'image/x-icon',\n\t\t\t};\n\t\t}\n\n\t\t// Adjust buffer to `mpegOffsetTolerance`\n\t\tawait tokenizer.peekBuffer(this.buffer, {length: Math.min(2 + this.options.mpegOffsetTolerance, tokenizer.fileInfo.size), mayBeLess: true});\n\n\t\t// Check MPEG 1 or 2 Layer 3 header, or 'layer 0' for ADTS (MPEG sync-word 0xFFE)\n\t\tif (this.buffer.length >= (2 + this.options.mpegOffsetTolerance)) {\n\t\t\tfor (let depth = 0; depth <= this.options.mpegOffsetTolerance; ++depth) {\n\t\t\t\tconst type = this.scanMpeg(depth);\n\t\t\t\tif (type) {\n\t\t\t\t\treturn type;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tasync readTiffTag(bigEndian) {\n\t\tconst tagId = await this.tokenizer.readToken(bigEndian ? Token.UINT16_BE : Token.UINT16_LE);\n\t\tthis.tokenizer.ignore(10);\n\t\tswitch (tagId) {\n\t\t\tcase 50_341:\n\t\t\t\treturn {\n\t\t\t\t\text: 'arw',\n\t\t\t\t\tmime: 'image/x-sony-arw',\n\t\t\t\t};\n\t\t\tcase 50_706:\n\t\t\t\treturn {\n\t\t\t\t\text: 'dng',\n\t\t\t\t\tmime: 'image/x-adobe-dng',\n\t\t\t\t};\n\t\t\tdefault:\n\t\t}\n\t}\n\n\tasync readTiffIFD(bigEndian) {\n\t\tconst numberOfTags = await this.tokenizer.readToken(bigEndian ? Token.UINT16_BE : Token.UINT16_LE);\n\t\tfor (let n = 0; n < numberOfTags; ++n) {\n\t\t\tconst fileType = await this.readTiffTag(bigEndian);\n\t\t\tif (fileType) {\n\t\t\t\treturn fileType;\n\t\t\t}\n\t\t}\n\t}\n\n\tasync readTiffHeader(bigEndian) {\n\t\tconst version = (bigEndian ? Token.UINT16_BE : Token.UINT16_LE).get(this.buffer, 2);\n\t\tconst ifdOffset = (bigEndian ? Token.UINT32_BE : Token.UINT32_LE).get(this.buffer, 4);\n\n\t\tif (version === 42) {\n\t\t\t// TIFF file header\n\t\t\tif (ifdOffset >= 6) {\n\t\t\t\tif (this.checkString('CR', {offset: 8})) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'cr2',\n\t\t\t\t\t\tmime: 'image/x-canon-cr2',\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (ifdOffset >= 8) {\n\t\t\t\t\tconst someId1 = (bigEndian ? Token.UINT16_BE : Token.UINT16_LE).get(this.buffer, 8);\n\t\t\t\t\tconst someId2 = (bigEndian ? Token.UINT16_BE : Token.UINT16_LE).get(this.buffer, 10);\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t(someId1 === 0x1C && someId2 === 0xFE)\n\t\t\t\t\t\t|| (someId1 === 0x1F && someId2 === 0x0B)) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\text: 'nef',\n\t\t\t\t\t\t\tmime: 'image/x-nikon-nef',\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait this.tokenizer.ignore(ifdOffset);\n\t\t\tconst fileType = await this.readTiffIFD(bigEndian);\n\t\t\treturn fileType ?? {\n\t\t\t\text: 'tif',\n\t\t\t\tmime: 'image/tiff',\n\t\t\t};\n\t\t}\n\n\t\tif (version === 43) {\t// Big TIFF file header\n\t\t\treturn {\n\t\t\t\text: 'tif',\n\t\t\t\tmime: 'image/tiff',\n\t\t\t};\n\t\t}\n\t}\n\n\t/**\n\tScan check MPEG 1 or 2 Layer 3 header, or 'layer 0' for ADTS (MPEG sync-word 0xFFE).\n\n\t@param offset - Offset to scan for sync-preamble.\n\t@returns {{ext: string, mime: string}}\n\t*/\n\tscanMpeg(offset) {\n\t\tif (this.check([0xFF, 0xE0], {offset, mask: [0xFF, 0xE0]})) {\n\t\t\tif (this.check([0x10], {offset: offset + 1, mask: [0x16]})) {\n\t\t\t\t// Check for (ADTS) MPEG-2\n\t\t\t\tif (this.check([0x08], {offset: offset + 1, mask: [0x08]})) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'aac',\n\t\t\t\t\t\tmime: 'audio/aac',\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Must be (ADTS) MPEG-4\n\t\t\t\treturn {\n\t\t\t\t\text: 'aac',\n\t\t\t\t\tmime: 'audio/aac',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// MPEG 1 or 2 Layer 3 header\n\t\t\t// Check for MPEG layer 3\n\t\t\tif (this.check([0x02], {offset: offset + 1, mask: [0x06]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mp3',\n\t\t\t\t\tmime: 'audio/mpeg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Check for MPEG layer 2\n\t\t\tif (this.check([0x04], {offset: offset + 1, mask: [0x06]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mp2',\n\t\t\t\t\tmime: 'audio/mpeg',\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Check for MPEG layer 1\n\t\t\tif (this.check([0x06], {offset: offset + 1, mask: [0x06]})) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mp1',\n\t\t\t\t\tmime: 'audio/mpeg',\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport const supportedExtensions = new Set(extensions);\nexport const supportedMimeTypes = new Set(mimeTypes);\n","export const extensions = [\n\t'jpg',\n\t'png',\n\t'apng',\n\t'gif',\n\t'webp',\n\t'flif',\n\t'xcf',\n\t'cr2',\n\t'cr3',\n\t'orf',\n\t'arw',\n\t'dng',\n\t'nef',\n\t'rw2',\n\t'raf',\n\t'tif',\n\t'bmp',\n\t'icns',\n\t'jxr',\n\t'psd',\n\t'indd',\n\t'zip',\n\t'tar',\n\t'rar',\n\t'gz',\n\t'bz2',\n\t'7z',\n\t'dmg',\n\t'mp4',\n\t'mid',\n\t'mkv',\n\t'webm',\n\t'mov',\n\t'avi',\n\t'mpg',\n\t'mp2',\n\t'mp3',\n\t'm4a',\n\t'oga',\n\t'ogg',\n\t'ogv',\n\t'opus',\n\t'flac',\n\t'wav',\n\t'spx',\n\t'amr',\n\t'pdf',\n\t'epub',\n\t'elf',\n\t'macho',\n\t'exe',\n\t'swf',\n\t'rtf',\n\t'wasm',\n\t'woff',\n\t'woff2',\n\t'eot',\n\t'ttf',\n\t'otf',\n\t'ttc',\n\t'ico',\n\t'flv',\n\t'ps',\n\t'xz',\n\t'sqlite',\n\t'nes',\n\t'crx',\n\t'xpi',\n\t'cab',\n\t'deb',\n\t'ar',\n\t'rpm',\n\t'Z',\n\t'lz',\n\t'cfb',\n\t'mxf',\n\t'mts',\n\t'blend',\n\t'bpg',\n\t'docx',\n\t'pptx',\n\t'xlsx',\n\t'3gp',\n\t'3g2',\n\t'j2c',\n\t'jp2',\n\t'jpm',\n\t'jpx',\n\t'mj2',\n\t'aif',\n\t'qcp',\n\t'odt',\n\t'ods',\n\t'odp',\n\t'xml',\n\t'mobi',\n\t'heic',\n\t'cur',\n\t'ktx',\n\t'ape',\n\t'wv',\n\t'dcm',\n\t'ics',\n\t'glb',\n\t'pcap',\n\t'dsf',\n\t'lnk',\n\t'alias',\n\t'voc',\n\t'ac3',\n\t'm4v',\n\t'm4p',\n\t'm4b',\n\t'f4v',\n\t'f4p',\n\t'f4b',\n\t'f4a',\n\t'mie',\n\t'asf',\n\t'ogm',\n\t'ogx',\n\t'mpc',\n\t'arrow',\n\t'shp',\n\t'aac',\n\t'mp1',\n\t'it',\n\t's3m',\n\t'xm',\n\t'skp',\n\t'avif',\n\t'eps',\n\t'lzh',\n\t'pgp',\n\t'asar',\n\t'stl',\n\t'chm',\n\t'3mf',\n\t'zst',\n\t'jxl',\n\t'vcf',\n\t'jls',\n\t'pst',\n\t'dwg',\n\t'parquet',\n\t'class',\n\t'arj',\n\t'cpio',\n\t'ace',\n\t'avro',\n\t'icc',\n\t'fbx',\n\t'vsdx',\n\t'vtt',\n\t'apk',\n\t'drc',\n\t'lz4',\n\t'potx',\n\t'xltx',\n\t'dotx',\n\t'xltm',\n\t'ott',\n\t'ots',\n\t'otp',\n\t'odg',\n\t'otg',\n\t'xlsm',\n\t'docm',\n\t'dotm',\n\t'potm',\n\t'pptm',\n\t'jar',\n\t'rm',\n\t'ppsm',\n\t'ppsx',\n];\n\nexport const mimeTypes = [\n\t'image/jpeg',\n\t'image/png',\n\t'image/gif',\n\t'image/webp',\n\t'image/flif',\n\t'image/x-xcf',\n\t'image/x-canon-cr2',\n\t'image/x-canon-cr3',\n\t'image/tiff',\n\t'image/bmp',\n\t'image/vnd.ms-photo',\n\t'image/vnd.adobe.photoshop',\n\t'application/x-indesign',\n\t'application/epub+zip',\n\t'application/x-xpinstall',\n\t'application/vnd.ms-powerpoint.slideshow.macroenabled.12',\n\t'application/vnd.oasis.opendocument.text',\n\t'application/vnd.oasis.opendocument.spreadsheet',\n\t'application/vnd.oasis.opendocument.presentation',\n\t'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\t'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n\t'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n\t'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n\t'application/zip',\n\t'application/x-tar',\n\t'application/x-rar-compressed',\n\t'application/gzip',\n\t'application/x-bzip2',\n\t'application/x-7z-compressed',\n\t'application/x-apple-diskimage',\n\t'application/vnd.apache.arrow.file',\n\t'video/mp4',\n\t'audio/midi',\n\t'video/matroska',\n\t'video/webm',\n\t'video/quicktime',\n\t'video/vnd.avi',\n\t'audio/wav',\n\t'audio/qcelp',\n\t'audio/x-ms-asf',\n\t'video/x-ms-asf',\n\t'application/vnd.ms-asf',\n\t'video/mpeg',\n\t'video/3gpp',\n\t'audio/mpeg',\n\t'audio/mp4', // RFC 4337\n\t'video/ogg',\n\t'audio/ogg',\n\t'audio/ogg; codecs=opus',\n\t'application/ogg',\n\t'audio/flac',\n\t'audio/ape',\n\t'audio/wavpack',\n\t'audio/amr',\n\t'application/pdf',\n\t'application/x-elf',\n\t'application/x-mach-binary',\n\t'application/x-msdownload',\n\t'application/x-shockwave-flash',\n\t'application/rtf',\n\t'application/wasm',\n\t'font/woff',\n\t'font/woff2',\n\t'application/vnd.ms-fontobject',\n\t'font/ttf',\n\t'font/otf',\n\t'font/collection',\n\t'image/x-icon',\n\t'video/x-flv',\n\t'application/postscript',\n\t'application/eps',\n\t'application/x-xz',\n\t'application/x-sqlite3',\n\t'application/x-nintendo-nes-rom',\n\t'application/x-google-chrome-extension',\n\t'application/vnd.ms-cab-compressed',\n\t'application/x-deb',\n\t'application/x-unix-archive',\n\t'application/x-rpm',\n\t'application/x-compress',\n\t'application/x-lzip',\n\t'application/x-cfb',\n\t'application/x-mie',\n\t'application/mxf',\n\t'video/mp2t',\n\t'application/x-blender',\n\t'image/bpg',\n\t'image/j2c',\n\t'image/jp2',\n\t'image/jpx',\n\t'image/jpm',\n\t'image/mj2',\n\t'audio/aiff',\n\t'application/xml',\n\t'application/x-mobipocket-ebook',\n\t'image/heif',\n\t'image/heif-sequence',\n\t'image/heic',\n\t'image/heic-sequence',\n\t'image/icns',\n\t'image/ktx',\n\t'application/dicom',\n\t'audio/x-musepack',\n\t'text/calendar',\n\t'text/vcard',\n\t'text/vtt',\n\t'model/gltf-binary',\n\t'application/vnd.tcpdump.pcap',\n\t'audio/x-dsf', // Non-standard\n\t'application/x.ms.shortcut', // Invented by us\n\t'application/x.apple.alias', // Invented by us\n\t'audio/x-voc',\n\t'audio/vnd.dolby.dd-raw',\n\t'audio/x-m4a',\n\t'image/apng',\n\t'image/x-olympus-orf',\n\t'image/x-sony-arw',\n\t'image/x-adobe-dng',\n\t'image/x-nikon-nef',\n\t'image/x-panasonic-rw2',\n\t'image/x-fujifilm-raf',\n\t'video/x-m4v',\n\t'video/3gpp2',\n\t'application/x-esri-shape',\n\t'audio/aac',\n\t'audio/x-it',\n\t'audio/x-s3m',\n\t'audio/x-xm',\n\t'video/MP1S',\n\t'video/MP2P',\n\t'application/vnd.sketchup.skp',\n\t'image/avif',\n\t'application/x-lzh-compressed',\n\t'application/pgp-encrypted',\n\t'application/x-asar',\n\t'model/stl',\n\t'application/vnd.ms-htmlhelp',\n\t'model/3mf',\n\t'image/jxl',\n\t'application/zstd',\n\t'image/jls',\n\t'application/vnd.ms-outlook',\n\t'image/vnd.dwg',\n\t'application/vnd.apache.parquet',\n\t'application/java-vm',\n\t'application/x-arj',\n\t'application/x-cpio',\n\t'application/x-ace-compressed',\n\t'application/avro',\n\t'application/vnd.iccprofile',\n\t'application/x.autodesk.fbx', // Invented by us\n\t'application/vnd.visio',\n\t'application/vnd.android.package-archive',\n\t'application/vnd.google.draco', // Invented by us\n\t'application/x-lz4', // Invented by us\n\t'application/vnd.openxmlformats-officedocument.presentationml.template',\n\t'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n\t'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n\t'application/vnd.ms-excel.template.macroenabled.12',\n\t'application/vnd.oasis.opendocument.text-template',\n\t'application/vnd.oasis.opendocument.spreadsheet-template',\n\t'application/vnd.oasis.opendocument.presentation-template',\n\t'application/vnd.oasis.opendocument.graphics',\n\t'application/vnd.oasis.opendocument.graphics-template',\n\t'application/vnd.ms-excel.sheet.macroenabled.12',\n\t'application/vnd.ms-word.document.macroenabled.12',\n\t'application/vnd.ms-word.template.macroenabled.12',\n\t'application/vnd.ms-powerpoint.template.macroenabled.12',\n\t'application/vnd.ms-powerpoint.presentation.macroenabled.12',\n\t'application/java-archive',\n\t'application/vnd.rn-realmedia',\n];\n","/*!\n * content-type\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 7231 sec 3.1.1.1\n *\n * parameter     = token \"=\" ( token / quoted-string )\n * token         = 1*tchar\n * tchar         = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\"\n *               / \"+\" / \"-\" / \".\" / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n *               / DIGIT / ALPHA\n *               ; any VCHAR, except delimiters\n * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE\n * qdtext        = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text\n * obs-text      = %x80-FF\n * quoted-pair   = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n */\nvar PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *(\"(?:[\\u000b\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u000b\\u0020-\\u00ff])*\"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\u000b\\u0020-\\u007e\\u0080-\\u00ff]+$/ // eslint-disable-line no-control-regex\nvar TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 7230 sec 3.2.6\n *\n * quoted-pair = \"\\\" ( HTAB / SP / VCHAR / obs-text )\n * obs-text    = %x80-FF\n */\nvar QESC_REGEXP = /\\\\([\\u000b\\u0020-\\u00ff])/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6\n */\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp to match type in RFC 7231 sec 3.1.1.1\n *\n * media-type = type \"/\" subtype\n * type       = token\n * subtype    = token\n */\nvar TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/\n\n/**\n * Module exports.\n * @public\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format (obj) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('argument obj is required')\n  }\n\n  var parameters = obj.parameters\n  var type = obj.type\n\n  if (!type || !TYPE_REGEXP.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  var string = type\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      if (!TOKEN_REGEXP.test(param)) {\n        throw new TypeError('invalid parameter name')\n      }\n\n      string += '; ' + param + '=' + qstring(parameters[param])\n    }\n  }\n\n  return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @public\n */\n\nfunction parse (string) {\n  if (!string) {\n    throw new TypeError('argument string is required')\n  }\n\n  // support req/res-like objects as argument\n  var header = typeof string === 'object'\n    ? getcontenttype(string)\n    : string\n\n  if (typeof header !== 'string') {\n    throw new TypeError('argument string is required to be a string')\n  }\n\n  var index = header.indexOf(';')\n  var type = index !== -1\n    ? header.slice(0, index).trim()\n    : header.trim()\n\n  if (!TYPE_REGEXP.test(type)) {\n    throw new TypeError('invalid media type')\n  }\n\n  var obj = new ContentType(type.toLowerCase())\n\n  // parse parameters\n  if (index !== -1) {\n    var key\n    var match\n    var value\n\n    PARAM_REGEXP.lastIndex = index\n\n    while ((match = PARAM_REGEXP.exec(header))) {\n      if (match.index !== index) {\n        throw new TypeError('invalid parameter format')\n      }\n\n      index += match[0].length\n      key = match[1].toLowerCase()\n      value = match[2]\n\n      if (value.charCodeAt(0) === 0x22 /* \" */) {\n        // remove quotes\n        value = value.slice(1, -1)\n\n        // remove escapes\n        if (value.indexOf('\\\\') !== -1) {\n          value = value.replace(QESC_REGEXP, '$1')\n        }\n      }\n\n      obj.parameters[key] = value\n    }\n\n    if (index !== header.length) {\n      throw new TypeError('invalid parameter format')\n    }\n  }\n\n  return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @private\n */\n\nfunction getcontenttype (obj) {\n  var header\n\n  if (typeof obj.getHeader === 'function') {\n    // res-like\n    header = obj.getHeader('content-type')\n  } else if (typeof obj.headers === 'object') {\n    // req-like\n    header = obj.headers && obj.headers['content-type']\n  }\n\n  if (typeof header !== 'string') {\n    throw new TypeError('content-type header is missing from object')\n  }\n\n  return header\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @private\n */\n\nfunction qstring (val) {\n  var str = String(val)\n\n  // no need to quote tokens\n  if (TOKEN_REGEXP.test(str)) {\n    return str\n  }\n\n  if (str.length > 0 && !TEXT_REGEXP.test(str)) {\n    throw new TypeError('invalid parameter value')\n  }\n\n  return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Class to represent a content type.\n * @private\n */\nfunction ContentType (type) {\n  this.parameters = Object.create(null)\n  this.type = type\n}\n","/*!\n * media-typer\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to match type in RFC 6838\n *\n * type-name = restricted-name\n * subtype-name = restricted-name\n * restricted-name = restricted-name-first *126restricted-name-chars\n * restricted-name-first  = ALPHA / DIGIT\n * restricted-name-chars  = ALPHA / DIGIT / \"!\" / \"#\" /\n *                          \"$\" / \"&\" / \"-\" / \"^\" / \"_\"\n * restricted-name-chars =/ \".\" ; Characters before first dot always\n *                              ; specify a facet name\n * restricted-name-chars =/ \"+\" ; Characters after last plus always\n *                              ; specify a structured syntax suffix\n * ALPHA =  %x41-5A / %x61-7A   ; A-Z / a-z\n * DIGIT =  %x30-39             ; 0-9\n */\nvar SUBTYPE_NAME_REGEXP = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/\nvar TYPE_NAME_REGEXP = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/\nvar TYPE_REGEXP = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/\n\n/**\n * Module exports.\n */\n\nexports.format = format\nexports.parse = parse\nexports.test = test\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @public\n */\n\nfunction format (obj) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('argument obj is required')\n  }\n\n  var subtype = obj.subtype\n  var suffix = obj.suffix\n  var type = obj.type\n\n  if (!type || !TYPE_NAME_REGEXP.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  if (!subtype || !SUBTYPE_NAME_REGEXP.test(subtype)) {\n    throw new TypeError('invalid subtype')\n  }\n\n  // format as type/subtype\n  var string = type + '/' + subtype\n\n  // append +suffix\n  if (suffix) {\n    if (!TYPE_NAME_REGEXP.test(suffix)) {\n      throw new TypeError('invalid suffix')\n    }\n\n    string += '+' + suffix\n  }\n\n  return string\n}\n\n/**\n * Test media type.\n *\n * @param {string} string\n * @return {object}\n * @public\n */\n\nfunction test (string) {\n  if (!string) {\n    throw new TypeError('argument string is required')\n  }\n\n  if (typeof string !== 'string') {\n    throw new TypeError('argument string is required to be a string')\n  }\n\n  return TYPE_REGEXP.test(string.toLowerCase())\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string} string\n * @return {object}\n * @public\n */\n\nfunction parse (string) {\n  if (!string) {\n    throw new TypeError('argument string is required')\n  }\n\n  if (typeof string !== 'string') {\n    throw new TypeError('argument string is required to be a string')\n  }\n\n  var match = TYPE_REGEXP.exec(string.toLowerCase())\n\n  if (!match) {\n    throw new TypeError('invalid media type')\n  }\n\n  var type = match[1]\n  var subtype = match[2]\n  var suffix\n\n  // suffix after last +\n  var index = subtype.lastIndexOf('+')\n  if (index !== -1) {\n    suffix = subtype.substr(index + 1)\n    subtype = subtype.substr(0, index)\n  }\n\n  return new MediaType(type, subtype, suffix)\n}\n\n/**\n * Class for MediaType object.\n * @public\n */\n\nfunction MediaType (type, subtype, suffix) {\n  this.type = type\n  this.subtype = subtype\n  this.suffix = suffix\n}\n","export const TargetType = {\n    10: 'shot',\n    20: 'scene',\n    30: 'track',\n    40: 'part',\n    50: 'album',\n    60: 'edition',\n    70: 'collection'\n};\nexport const TrackType = {\n    video: 0x01,\n    audio: 0x02,\n    complex: 0x03,\n    logo: 0x04,\n    subtitle: 0x11,\n    button: 0x12,\n    control: 0x20\n};\nexport const TrackTypeValueToKeyMap = {\n    [TrackType.video]: 'video',\n    [TrackType.audio]: 'audio',\n    [TrackType.complex]: 'complex',\n    [TrackType.logo]: 'logo',\n    [TrackType.subtitle]: 'subtitle',\n    [TrackType.button]: 'button',\n    [TrackType.control]: 'control'\n};\n//# sourceMappingURL=types.js.map","export const makeParseError = (name) => {\n    return class ParseError extends Error {\n        constructor(message) {\n            super(message);\n            this.name = name;\n        }\n    };\n};\n// Concrete error class representing a file type determination failure.\nexport class CouldNotDetermineFileTypeError extends makeParseError('CouldNotDetermineFileTypeError') {\n}\n// Concrete error class representing an unsupported file type.\nexport class UnsupportedFileTypeError extends makeParseError('UnsupportedFileTypeError') {\n}\n// Concrete error class representing unexpected file content.\nclass UnexpectedFileContentError extends makeParseError('UnexpectedFileContentError') {\n    constructor(fileType, message) {\n        super(message);\n        this.fileType = fileType;\n    }\n    // Override toString to include file type information.\n    toString() {\n        return `${this.name} (FileType: ${this.fileType}): ${this.message}`;\n    }\n}\n// Concrete error class representing a field decoding error.\nexport class FieldDecodingError extends makeParseError('FieldDecodingError') {\n}\nexport class InternalParserError extends makeParseError('InternalParserError') {\n}\n// Factory function to create a specific type of UnexpectedFileContentError.\nexport const makeUnexpectedFileContentError = (fileType) => {\n    return class extends UnexpectedFileContentError {\n        constructor(message) {\n            super(fileType, message);\n        }\n    };\n};\n//# sourceMappingURL=ParseError.js.map","import { StringType } from 'token-types';\nimport { FieldDecodingError } from '../ParseError.js';\nexport function getBit(buf, off, bit) {\n    return (buf[off] & (1 << bit)) !== 0;\n}\n/**\n * Found delimiting zero in uint8Array\n * @param uint8Array Uint8Array to find the zero delimiter in\n * @param start Offset in uint8Array\n * @param end Last position to parse in uint8Array\n * @param encoding The string encoding used\n * @return Absolute position on uint8Array where zero found\n */\nexport function findZero(uint8Array, start, end, encoding) {\n    let i = start;\n    if (encoding === 'utf-16le') {\n        while (uint8Array[i] !== 0 || uint8Array[i + 1] !== 0) {\n            if (i >= end)\n                return end;\n            i += 2;\n        }\n        return i;\n    }\n    while (uint8Array[i] !== 0) {\n        if (i >= end)\n            return end;\n        i++;\n    }\n    return i;\n}\nexport function trimRightNull(x) {\n    const pos0 = x.indexOf('\\0');\n    return pos0 === -1 ? x : x.substr(0, pos0);\n}\nfunction swapBytes(uint8Array) {\n    const l = uint8Array.length;\n    if ((l & 1) !== 0)\n        throw new FieldDecodingError('Buffer length must be even');\n    for (let i = 0; i < l; i += 2) {\n        const a = uint8Array[i];\n        uint8Array[i] = uint8Array[i + 1];\n        uint8Array[i + 1] = a;\n    }\n    return uint8Array;\n}\n/**\n * Decode string\n */\nexport function decodeString(uint8Array, encoding) {\n    // annoying workaround for a double BOM issue\n    // https://github.com/leetreveil/musicmetadata/issues/84\n    if (uint8Array[0] === 0xFF && uint8Array[1] === 0xFE) { // little endian\n        return decodeString(uint8Array.subarray(2), encoding);\n    }\n    if (encoding === 'utf-16le' && uint8Array[0] === 0xFE && uint8Array[1] === 0xFF) {\n        // BOM, indicating big endian decoding\n        if ((uint8Array.length & 1) !== 0)\n            throw new FieldDecodingError('Expected even number of octets for 16-bit unicode string');\n        return decodeString(swapBytes(uint8Array), encoding);\n    }\n    return new StringType(uint8Array.length, encoding).get(uint8Array, 0);\n}\nexport function stripNulls(str) {\n    str = str.replace(/^\\x00+/g, '');\n    str = str.replace(/\\x00+$/g, '');\n    return str;\n}\n/**\n * Read bit-aligned number start from buffer\n * Total offset in bits = byteOffset * 8 + bitOffset\n * @param source Byte buffer\n * @param byteOffset Starting offset in bytes\n * @param bitOffset Starting offset in bits: 0 = lsb\n * @param len Length of number in bits\n * @return Decoded bit aligned number\n */\nexport function getBitAllignedNumber(source, byteOffset, bitOffset, len) {\n    const byteOff = byteOffset + ~~(bitOffset / 8);\n    const bitOff = bitOffset % 8;\n    let value = source[byteOff];\n    value &= 0xff >> bitOff;\n    const bitsRead = 8 - bitOff;\n    const bitsLeft = len - bitsRead;\n    if (bitsLeft < 0) {\n        value >>= (8 - bitOff - len);\n    }\n    else if (bitsLeft > 0) {\n        value <<= bitsLeft;\n        value |= getBitAllignedNumber(source, byteOffset, bitOffset + bitsRead, bitsLeft);\n    }\n    return value;\n}\n/**\n * Read bit-aligned number start from buffer\n * Total offset in bits = byteOffset * 8 + bitOffset\n * @param source Byte Uint8Array\n * @param byteOffset Starting offset in bytes\n * @param bitOffset Starting offset in bits: 0 = most significant bit, 7 is the least significant bit\n * @return True if bit is set\n */\nexport function isBitSet(source, byteOffset, bitOffset) {\n    return getBitAllignedNumber(source, byteOffset, bitOffset, 1) === 1;\n}\nexport function a2hex(str) {\n    const arr = [];\n    for (let i = 0, l = str.length; i < l; i++) {\n        const hex = Number(str.charCodeAt(i)).toString(16);\n        arr.push(hex.length === 1 ? `0${hex}` : hex);\n    }\n    return arr.join(' ');\n}\n/**\n * Convert power ratio to DB\n * ratio: [0..1]\n */\nexport function ratioToDb(ratio) {\n    return 10 * Math.log10(ratio);\n}\n/**\n * Convert dB to ratio\n * db Decibels\n */\nexport function dbToRatio(dB) {\n    return 10 ** (dB / 10);\n}\n/**\n * Convert replay gain to ratio and Decibel\n * @param value string holding a ratio like '0.034' or '-7.54 dB'\n */\nexport function toRatio(value) {\n    const ps = value.split(' ').map(p => p.trim().toLowerCase());\n    // @ts-ignore\n    if (ps.length >= 1) {\n        const v = Number.parseFloat(ps[0]);\n        return ps.length === 2 && ps[1] === 'db' ? {\n            dB: v,\n            ratio: dbToRatio(v)\n        } : {\n            dB: ratioToDb(v),\n            ratio: v\n        };\n    }\n}\n//# sourceMappingURL=Util.js.map","import * as Token from 'token-types';\nimport * as util from '../common/Util.js';\n/**\n * The picture type according to the ID3v2 APIC frame\n * Ref: http://id3.org/id3v2.3.0#Attached_picture\n */\nexport const AttachedPictureType = {\n    0: 'Other',\n    1: \"32x32 pixels 'file icon' (PNG only)\",\n    2: 'Other file icon',\n    3: 'Cover (front)',\n    4: 'Cover (back)',\n    5: 'Leaflet page',\n    6: 'Media (e.g. label side of CD)',\n    7: 'Lead artist/lead performer/soloist',\n    8: 'Artist/performer',\n    9: 'Conductor',\n    10: 'Band/Orchestra',\n    11: 'Composer',\n    12: 'Lyricist/text writer',\n    13: 'Recording Location',\n    14: 'During recording',\n    15: 'During performance',\n    16: 'Movie/video screen capture',\n    17: 'A bright coloured fish',\n    18: 'Illustration',\n    19: 'Band/artist logotype',\n    20: 'Publisher/Studio logotype'\n};\n/**\n * https://id3.org/id3v2.3.0#Synchronised_lyrics.2Ftext\n */\nexport const LyricsContentType = {\n    other: 0,\n    lyrics: 1,\n    text: 2,\n    movement_part: 3,\n    events: 4,\n    chord: 5,\n    trivia_pop: 6,\n};\nexport const TimestampFormat = {\n    notSynchronized0: 0,\n    mpegFrameNumber: 1,\n    milliseconds: 2\n};\n/**\n * 28 bits (representing up to 256MB) integer, the msb is 0 to avoid 'false syncsignals'.\n * 4 * %0xxxxxxx\n */\nexport const UINT32SYNCSAFE = {\n    get: (buf, off) => {\n        return buf[off + 3] & 0x7f | ((buf[off + 2]) << 7) |\n            ((buf[off + 1]) << 14) | ((buf[off]) << 21);\n    },\n    len: 4\n};\n/**\n * ID3v2 header\n * Ref: http://id3.org/id3v2.3.0#ID3v2_header\n * ToDo\n */\nexport const ID3v2Header = {\n    len: 10,\n    get: (buf, off) => {\n        return {\n            // ID3v2/file identifier   \"ID3\"\n            fileIdentifier: new Token.StringType(3, 'ascii').get(buf, off),\n            // ID3v2 versionIndex\n            version: {\n                major: Token.INT8.get(buf, off + 3),\n                revision: Token.INT8.get(buf, off + 4)\n            },\n            // ID3v2 flags\n            flags: {\n                // Unsynchronisation\n                unsynchronisation: util.getBit(buf, off + 5, 7),\n                // Extended header\n                isExtendedHeader: util.getBit(buf, off + 5, 6),\n                // Experimental indicator\n                expIndicator: util.getBit(buf, off + 5, 5),\n                footer: util.getBit(buf, off + 5, 4)\n            },\n            size: UINT32SYNCSAFE.get(buf, off + 6)\n        };\n    }\n};\nexport const ExtendedHeader = {\n    len: 10,\n    get: (buf, off) => {\n        return {\n            // Extended header size\n            size: Token.UINT32_BE.get(buf, off),\n            // Extended Flags\n            extendedFlags: Token.UINT16_BE.get(buf, off + 4),\n            // Size of padding\n            sizeOfPadding: Token.UINT32_BE.get(buf, off + 6),\n            // CRC data present\n            crcDataPresent: util.getBit(buf, off + 4, 31)\n        };\n    }\n};\nexport const TextEncodingToken = {\n    len: 1,\n    get: (uint8Array, off) => {\n        switch (uint8Array[off]) {\n            case 0x00:\n                return { encoding: 'latin1' }; // binary\n            case 0x01:\n                return { encoding: 'utf-16le', bom: true };\n            case 0x02:\n                return { encoding: 'utf-16le', bom: false };\n            case 0x03:\n                return { encoding: 'utf8', bom: false };\n            default:\n                return { encoding: 'utf8', bom: false };\n        }\n    }\n};\n/**\n * Used to read first portion of `SYLT` frame\n */\nexport const TextHeader = {\n    len: 4,\n    get: (uint8Array, off) => {\n        return {\n            encoding: TextEncodingToken.get(uint8Array, off),\n            language: new Token.StringType(3, 'latin1').get(uint8Array, off + 1)\n        };\n    }\n};\n/**\n * Used to read first portion of `SYLT` frame\n */\nexport const SyncTextHeader = {\n    len: 6,\n    get: (uint8Array, off) => {\n        const text = TextHeader.get(uint8Array, off);\n        return {\n            encoding: text.encoding,\n            language: text.language,\n            timeStampFormat: Token.UINT8.get(uint8Array, off + 4),\n            contentType: Token.UINT8.get(uint8Array, off + 5)\n        };\n    }\n};\n//# sourceMappingURL=ID3v2Token.js.map","const defaultTagInfo = {\n    multiple: false,\n};\nconst commonTags = {\n    year: defaultTagInfo,\n    track: defaultTagInfo,\n    disk: defaultTagInfo,\n    title: defaultTagInfo,\n    artist: defaultTagInfo,\n    artists: { multiple: true, unique: true },\n    albumartist: defaultTagInfo,\n    album: defaultTagInfo,\n    date: defaultTagInfo,\n    originaldate: defaultTagInfo,\n    originalyear: defaultTagInfo,\n    releasedate: defaultTagInfo,\n    comment: { multiple: true, unique: false },\n    genre: { multiple: true, unique: true },\n    picture: { multiple: true, unique: true },\n    composer: { multiple: true, unique: true },\n    lyrics: { multiple: true, unique: false },\n    albumsort: { multiple: false, unique: true },\n    titlesort: { multiple: false, unique: true },\n    work: { multiple: false, unique: true },\n    artistsort: { multiple: false, unique: true },\n    albumartistsort: { multiple: false, unique: true },\n    composersort: { multiple: false, unique: true },\n    lyricist: { multiple: true, unique: true },\n    writer: { multiple: true, unique: true },\n    conductor: { multiple: true, unique: true },\n    remixer: { multiple: true, unique: true },\n    arranger: { multiple: true, unique: true },\n    engineer: { multiple: true, unique: true },\n    producer: { multiple: true, unique: true },\n    technician: { multiple: true, unique: true },\n    djmixer: { multiple: true, unique: true },\n    mixer: { multiple: true, unique: true },\n    label: { multiple: true, unique: true },\n    grouping: defaultTagInfo,\n    subtitle: { multiple: true },\n    discsubtitle: defaultTagInfo,\n    totaltracks: defaultTagInfo,\n    totaldiscs: defaultTagInfo,\n    compilation: defaultTagInfo,\n    rating: { multiple: true },\n    bpm: defaultTagInfo,\n    mood: defaultTagInfo,\n    media: defaultTagInfo,\n    catalognumber: { multiple: true, unique: true },\n    tvShow: defaultTagInfo,\n    tvShowSort: defaultTagInfo,\n    tvSeason: defaultTagInfo,\n    tvEpisode: defaultTagInfo,\n    tvEpisodeId: defaultTagInfo,\n    tvNetwork: defaultTagInfo,\n    podcast: defaultTagInfo,\n    podcasturl: defaultTagInfo,\n    releasestatus: defaultTagInfo,\n    releasetype: { multiple: true },\n    releasecountry: defaultTagInfo,\n    script: defaultTagInfo,\n    language: defaultTagInfo,\n    copyright: defaultTagInfo,\n    license: defaultTagInfo,\n    encodedby: defaultTagInfo,\n    encodersettings: defaultTagInfo,\n    gapless: defaultTagInfo,\n    barcode: defaultTagInfo,\n    isrc: { multiple: true },\n    asin: defaultTagInfo,\n    musicbrainz_recordingid: defaultTagInfo,\n    musicbrainz_trackid: defaultTagInfo,\n    musicbrainz_albumid: defaultTagInfo,\n    musicbrainz_artistid: { multiple: true },\n    musicbrainz_albumartistid: { multiple: true },\n    musicbrainz_releasegroupid: defaultTagInfo,\n    musicbrainz_workid: defaultTagInfo,\n    musicbrainz_trmid: defaultTagInfo,\n    musicbrainz_discid: defaultTagInfo,\n    acoustid_id: defaultTagInfo,\n    acoustid_fingerprint: defaultTagInfo,\n    musicip_puid: defaultTagInfo,\n    musicip_fingerprint: defaultTagInfo,\n    website: defaultTagInfo,\n    'performer:instrument': { multiple: true, unique: true },\n    averageLevel: defaultTagInfo,\n    peakLevel: defaultTagInfo,\n    notes: { multiple: true, unique: false },\n    key: defaultTagInfo,\n    originalalbum: defaultTagInfo,\n    originalartist: defaultTagInfo,\n    discogs_artist_id: { multiple: true, unique: true },\n    discogs_release_id: defaultTagInfo,\n    discogs_label_id: defaultTagInfo,\n    discogs_master_release_id: defaultTagInfo,\n    discogs_votes: defaultTagInfo,\n    discogs_rating: defaultTagInfo,\n    replaygain_track_peak: defaultTagInfo,\n    replaygain_track_gain: defaultTagInfo,\n    replaygain_album_peak: defaultTagInfo,\n    replaygain_album_gain: defaultTagInfo,\n    replaygain_track_minmax: defaultTagInfo,\n    replaygain_album_minmax: defaultTagInfo,\n    replaygain_undo: defaultTagInfo,\n    description: { multiple: true },\n    longDescription: defaultTagInfo,\n    category: { multiple: true },\n    hdVideo: defaultTagInfo,\n    keywords: { multiple: true },\n    movement: defaultTagInfo,\n    movementIndex: defaultTagInfo,\n    movementTotal: defaultTagInfo,\n    podcastId: defaultTagInfo,\n    showMovement: defaultTagInfo,\n    stik: defaultTagInfo\n};\nexport const commonTagsKeys = /* @__PURE__ */ Object.keys(commonTags);\n/**\n * @param alias Name of common tag\n * @returns {boolean|*} true if given alias is mapped as a singleton', otherwise false\n */\nexport function isSingleton(alias) {\n    return commonTags[alias] && !commonTags[alias].multiple;\n}\n/**\n * @param alias Common (generic) tag\n * @returns {boolean|*} true if given alias is a singleton or explicitly marked as unique\n */\nexport function isUnique(alias) {\n    return !commonTags[alias].multiple || commonTags[alias].unique || false;\n}\n//# sourceMappingURL=GenericTagTypes.js.map","export class CommonTagMapper {\n    static toIntOrNull(str) {\n        const cleaned = Number.parseInt(str, 10);\n        return Number.isNaN(cleaned) ? null : cleaned;\n    }\n    // TODO: a string of 1of1 would fail to be converted\n    // converts 1/10 to no : 1, of : 10\n    // or 1 to no : 1, of : 0\n    static normalizeTrack(origVal) {\n        const split = origVal.toString().split('/');\n        return {\n            no: Number.parseInt(split[0], 10) || null,\n            of: Number.parseInt(split[1], 10) || null\n        };\n    }\n    constructor(tagTypes, tagMap) {\n        this.tagTypes = tagTypes;\n        this.tagMap = tagMap;\n    }\n    /**\n     * Process and set common tags\n     * write common tags to\n     * @param tag Native tag\n     * @param warnings Register warnings\n     * @return common name\n     */\n    mapGenericTag(tag, warnings) {\n        tag = { id: tag.id, value: tag.value }; // clone object\n        this.postMap(tag, warnings);\n        // Convert native tag event to generic 'alias' tag\n        const id = this.getCommonName(tag.id);\n        return id ? { id, value: tag.value } : null;\n    }\n    /**\n     * Convert native tag key to common tag key\n     * @param tag Native header tag\n     * @return common tag name (alias)\n     */\n    getCommonName(tag) {\n        return this.tagMap[tag];\n    }\n    /**\n     * Handle post mapping exceptions / correction\n     * @param tag Tag e.g. {\"©alb\", \"Buena Vista Social Club\")\n     * @param warnings Used to register warnings\n     */\n    postMap(_tag, _warnings) {\n        return;\n    }\n}\nCommonTagMapper.maxRatingScore = 1;\n//# sourceMappingURL=GenericTagMapper.js.map","import { CommonTagMapper } from '../common/GenericTagMapper.js';\n/**\n * ID3v1 tag mappings\n */\nconst id3v1TagMap = {\n    title: 'title',\n    artist: 'artist',\n    album: 'album',\n    year: 'year',\n    comment: 'comment',\n    track: 'track',\n    genre: 'genre'\n};\nexport class ID3v1TagMapper extends CommonTagMapper {\n    constructor() {\n        super(['ID3v1'], id3v1TagMap);\n    }\n}\n//# sourceMappingURL=ID3v1TagMap.js.map","import { CommonTagMapper } from './GenericTagMapper.js';\nexport class CaseInsensitiveTagMap extends CommonTagMapper {\n    constructor(tagTypes, tagMap) {\n        const upperCaseMap = {};\n        for (const tag of Object.keys(tagMap)) {\n            upperCaseMap[tag.toUpperCase()] = tagMap[tag];\n        }\n        super(tagTypes, upperCaseMap);\n    }\n    /**\n     * @tag  Native header tag\n     * @return common tag name (alias)\n     */\n    getCommonName(tag) {\n        return this.tagMap[tag.toUpperCase()];\n    }\n}\n//# sourceMappingURL=CaseInsensitiveTagMap.js.map","import { UINT32_LE } from 'token-types';\nimport { CommonTagMapper } from '../common/GenericTagMapper.js';\nimport { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap.js';\nimport { decodeString } from '../common/Util.js';\n/**\n * ID3v2.3/ID3v2.4 tag mappings\n */\nconst id3v24TagMap = {\n    // id3v2.3\n    TIT2: 'title',\n    TPE1: 'artist',\n    'TXXX:Artists': 'artists',\n    TPE2: 'albumartist',\n    TALB: 'album',\n    TDRV: 'date', // [ 'date', 'year' ] ToDo: improve 'year' mapping\n    /**\n     * Original release year\n     */\n    TORY: 'originalyear',\n    TPOS: 'disk',\n    TCON: 'genre',\n    APIC: 'picture',\n    TCOM: 'composer',\n    USLT: 'lyrics',\n    TSOA: 'albumsort',\n    TSOT: 'titlesort',\n    TOAL: 'originalalbum',\n    TSOP: 'artistsort',\n    TSO2: 'albumartistsort',\n    TSOC: 'composersort',\n    TEXT: 'lyricist',\n    'TXXX:Writer': 'writer',\n    TPE3: 'conductor',\n    // 'IPLS:instrument': 'performer:instrument', // ToDo\n    TPE4: 'remixer',\n    'IPLS:arranger': 'arranger',\n    'IPLS:engineer': 'engineer',\n    'IPLS:producer': 'producer',\n    'IPLS:DJ-mix': 'djmixer',\n    'IPLS:mix': 'mixer',\n    TPUB: 'label',\n    TIT1: 'grouping',\n    TIT3: 'subtitle',\n    TRCK: 'track',\n    TCMP: 'compilation',\n    POPM: 'rating',\n    TBPM: 'bpm',\n    TMED: 'media',\n    'TXXX:CATALOGNUMBER': 'catalognumber',\n    'TXXX:MusicBrainz Album Status': 'releasestatus',\n    'TXXX:MusicBrainz Album Type': 'releasetype',\n    /**\n     * Release country as documented: https://picard.musicbrainz.org/docs/mappings/#cite_note-0\n     */\n    'TXXX:MusicBrainz Album Release Country': 'releasecountry',\n    /**\n     * Release country as implemented // ToDo: report\n     */\n    'TXXX:RELEASECOUNTRY': 'releasecountry',\n    'TXXX:SCRIPT': 'script',\n    TLAN: 'language',\n    TCOP: 'copyright',\n    WCOP: 'license',\n    TENC: 'encodedby',\n    TSSE: 'encodersettings',\n    'TXXX:BARCODE': 'barcode',\n    'TXXX:ISRC': 'isrc',\n    TSRC: 'isrc',\n    'TXXX:ASIN': 'asin',\n    'TXXX:originalyear': 'originalyear',\n    'UFID:http://musicbrainz.org': 'musicbrainz_recordingid',\n    'TXXX:MusicBrainz Release Track Id': 'musicbrainz_trackid',\n    'TXXX:MusicBrainz Album Id': 'musicbrainz_albumid',\n    'TXXX:MusicBrainz Artist Id': 'musicbrainz_artistid',\n    'TXXX:MusicBrainz Album Artist Id': 'musicbrainz_albumartistid',\n    'TXXX:MusicBrainz Release Group Id': 'musicbrainz_releasegroupid',\n    'TXXX:MusicBrainz Work Id': 'musicbrainz_workid',\n    'TXXX:MusicBrainz TRM Id': 'musicbrainz_trmid',\n    'TXXX:MusicBrainz Disc Id': 'musicbrainz_discid',\n    'TXXX:ACOUSTID_ID': 'acoustid_id',\n    'TXXX:Acoustid Id': 'acoustid_id',\n    'TXXX:Acoustid Fingerprint': 'acoustid_fingerprint',\n    'TXXX:MusicIP PUID': 'musicip_puid',\n    'TXXX:MusicMagic Fingerprint': 'musicip_fingerprint',\n    WOAR: 'website',\n    // id3v2.4\n    // ToDo: In same sequence as defined at http://id3.org/id3v2.4.0-frames\n    TDRC: 'date', // date YYYY-MM-DD\n    TYER: 'year',\n    TDOR: 'originaldate',\n    // 'TMCL:instrument': 'performer:instrument',\n    'TIPL:arranger': 'arranger',\n    'TIPL:engineer': 'engineer',\n    'TIPL:producer': 'producer',\n    'TIPL:DJ-mix': 'djmixer',\n    'TIPL:mix': 'mixer',\n    TMOO: 'mood',\n    // additional mappings:\n    SYLT: 'lyrics',\n    TSST: 'discsubtitle',\n    TKEY: 'key',\n    COMM: 'comment',\n    TOPE: 'originalartist',\n    // Windows Media Player\n    'PRIV:AverageLevel': 'averageLevel',\n    'PRIV:PeakLevel': 'peakLevel',\n    // Discogs\n    'TXXX:DISCOGS_ARTIST_ID': 'discogs_artist_id',\n    'TXXX:DISCOGS_ARTISTS': 'artists',\n    'TXXX:DISCOGS_ARTIST_NAME': 'artists',\n    'TXXX:DISCOGS_ALBUM_ARTISTS': 'albumartist',\n    'TXXX:DISCOGS_CATALOG': 'catalognumber',\n    'TXXX:DISCOGS_COUNTRY': 'releasecountry',\n    'TXXX:DISCOGS_DATE': 'originaldate',\n    'TXXX:DISCOGS_LABEL': 'label',\n    'TXXX:DISCOGS_LABEL_ID': 'discogs_label_id',\n    'TXXX:DISCOGS_MASTER_RELEASE_ID': 'discogs_master_release_id',\n    'TXXX:DISCOGS_RATING': 'discogs_rating',\n    'TXXX:DISCOGS_RELEASED': 'date',\n    'TXXX:DISCOGS_RELEASE_ID': 'discogs_release_id',\n    'TXXX:DISCOGS_VOTES': 'discogs_votes',\n    'TXXX:CATALOGID': 'catalognumber',\n    'TXXX:STYLE': 'genre',\n    'TXXX:REPLAYGAIN_TRACK_PEAK': 'replaygain_track_peak',\n    'TXXX:REPLAYGAIN_TRACK_GAIN': 'replaygain_track_gain',\n    'TXXX:REPLAYGAIN_ALBUM_PEAK': 'replaygain_album_peak',\n    'TXXX:REPLAYGAIN_ALBUM_GAIN': 'replaygain_album_gain',\n    'TXXX:MP3GAIN_MINMAX': 'replaygain_track_minmax',\n    'TXXX:MP3GAIN_ALBUM_MINMAX': 'replaygain_album_minmax',\n    'TXXX:MP3GAIN_UNDO': 'replaygain_undo',\n    MVNM: 'movement',\n    MVIN: 'movementIndex',\n    PCST: 'podcast',\n    TCAT: 'category',\n    TDES: 'description',\n    TDRL: 'releasedate',\n    TGID: 'podcastId',\n    TKWD: 'keywords',\n    WFED: 'podcasturl',\n    GRP1: 'grouping'\n};\nexport class ID3v24TagMapper extends CaseInsensitiveTagMap {\n    static toRating(popm) {\n        return {\n            source: popm.email,\n            rating: popm.rating > 0 ? (popm.rating - 1) / 254 * CommonTagMapper.maxRatingScore : undefined\n        };\n    }\n    constructor() {\n        super(['ID3v2.3', 'ID3v2.4'], id3v24TagMap);\n    }\n    /**\n     * Handle post mapping exceptions / correction\n     * @param tag to post map\n     * @param warnings Wil be used to register (collect) warnings\n     */\n    postMap(tag, warnings) {\n        switch (tag.id) {\n            case 'UFID':\n                {\n                    // decode MusicBrainz Recording Id\n                    const idTag = tag.value;\n                    if (idTag.owner_identifier === 'http://musicbrainz.org') {\n                        tag.id += `:${idTag.owner_identifier}`;\n                        tag.value = decodeString(idTag.identifier, 'latin1'); // latin1 == iso-8859-1\n                    }\n                }\n                break;\n            case 'PRIV':\n                {\n                    const customTag = tag.value;\n                    switch (customTag.owner_identifier) {\n                        // decode Windows Media Player\n                        case 'AverageLevel':\n                        case 'PeakValue':\n                            tag.id += `:${customTag.owner_identifier}`;\n                            tag.value = customTag.data.length === 4 ? UINT32_LE.get(customTag.data, 0) : null;\n                            if (tag.value === null) {\n                                warnings.addWarning('Failed to parse PRIV:PeakValue');\n                            }\n                            break;\n                        default:\n                            warnings.addWarning(`Unknown PRIV owner-identifier: ${customTag.data}`);\n                    }\n                }\n                break;\n            case 'POPM':\n                tag.value = ID3v24TagMapper.toRating(tag.value);\n                break;\n            default:\n                break;\n        }\n    }\n}\n//# sourceMappingURL=ID3v24TagMapper.js.map","import { CommonTagMapper } from '../common/GenericTagMapper.js';\n/**\n * ASF Metadata tag mappings.\n * See http://msdn.microsoft.com/en-us/library/ms867702.aspx\n */\nconst asfTagMap = {\n    Title: 'title',\n    Author: 'artist',\n    'WM/AlbumArtist': 'albumartist',\n    'WM/AlbumTitle': 'album',\n    'WM/Year': 'date', // changed to 'year' to 'date' based on Picard mappings; ToDo: check me\n    'WM/OriginalReleaseTime': 'originaldate',\n    'WM/OriginalReleaseYear': 'originalyear',\n    Description: 'comment',\n    'WM/TrackNumber': 'track',\n    'WM/PartOfSet': 'disk',\n    'WM/Genre': 'genre',\n    'WM/Composer': 'composer',\n    'WM/Lyrics': 'lyrics',\n    'WM/AlbumSortOrder': 'albumsort',\n    'WM/TitleSortOrder': 'titlesort',\n    'WM/ArtistSortOrder': 'artistsort',\n    'WM/AlbumArtistSortOrder': 'albumartistsort',\n    'WM/ComposerSortOrder': 'composersort',\n    'WM/Writer': 'lyricist',\n    'WM/Conductor': 'conductor',\n    'WM/ModifiedBy': 'remixer',\n    'WM/Engineer': 'engineer',\n    'WM/Producer': 'producer',\n    'WM/DJMixer': 'djmixer',\n    'WM/Mixer': 'mixer',\n    'WM/Publisher': 'label',\n    'WM/ContentGroupDescription': 'grouping',\n    'WM/SubTitle': 'subtitle',\n    'WM/SetSubTitle': 'discsubtitle',\n    // 'WM/PartOfSet': 'totaldiscs',\n    'WM/IsCompilation': 'compilation',\n    'WM/SharedUserRating': 'rating',\n    'WM/BeatsPerMinute': 'bpm',\n    'WM/Mood': 'mood',\n    'WM/Media': 'media',\n    'WM/CatalogNo': 'catalognumber',\n    'MusicBrainz/Album Status': 'releasestatus',\n    'MusicBrainz/Album Type': 'releasetype',\n    'MusicBrainz/Album Release Country': 'releasecountry',\n    'WM/Script': 'script',\n    'WM/Language': 'language',\n    Copyright: 'copyright',\n    LICENSE: 'license',\n    'WM/EncodedBy': 'encodedby',\n    'WM/EncodingSettings': 'encodersettings',\n    'WM/Barcode': 'barcode',\n    'WM/ISRC': 'isrc',\n    'MusicBrainz/Track Id': 'musicbrainz_recordingid',\n    'MusicBrainz/Release Track Id': 'musicbrainz_trackid',\n    'MusicBrainz/Album Id': 'musicbrainz_albumid',\n    'MusicBrainz/Artist Id': 'musicbrainz_artistid',\n    'MusicBrainz/Album Artist Id': 'musicbrainz_albumartistid',\n    'MusicBrainz/Release Group Id': 'musicbrainz_releasegroupid',\n    'MusicBrainz/Work Id': 'musicbrainz_workid',\n    'MusicBrainz/TRM Id': 'musicbrainz_trmid',\n    'MusicBrainz/Disc Id': 'musicbrainz_discid',\n    'Acoustid/Id': 'acoustid_id',\n    'Acoustid/Fingerprint': 'acoustid_fingerprint',\n    'MusicIP/PUID': 'musicip_puid',\n    'WM/ARTISTS': 'artists',\n    'WM/InitialKey': 'key',\n    ASIN: 'asin',\n    'WM/Work': 'work',\n    'WM/AuthorURL': 'website',\n    'WM/Picture': 'picture'\n};\nexport class AsfTagMapper extends CommonTagMapper {\n    static toRating(rating) {\n        return {\n            rating: Number.parseFloat(rating + 1) / 5\n        };\n    }\n    constructor() {\n        super(['asf'], asfTagMap);\n    }\n    postMap(tag) {\n        switch (tag.id) {\n            case 'WM/SharedUserRating': {\n                const keys = tag.id.split(':');\n                tag.value = AsfTagMapper.toRating(tag.value);\n                tag.id = keys[0];\n                break;\n            }\n        }\n    }\n}\n//# sourceMappingURL=AsfTagMapper.js.map","import { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap.js';\n/**\n * ID3v2.2 tag mappings\n */\nexport const id3v22TagMap = {\n    TT2: 'title',\n    TP1: 'artist',\n    TP2: 'albumartist',\n    TAL: 'album',\n    TYE: 'year',\n    COM: 'comment',\n    TRK: 'track',\n    TPA: 'disk',\n    TCO: 'genre',\n    PIC: 'picture',\n    TCM: 'composer',\n    TOR: 'originaldate',\n    TOT: 'originalalbum',\n    TXT: 'lyricist',\n    TP3: 'conductor',\n    TPB: 'label',\n    TT1: 'grouping',\n    TT3: 'subtitle',\n    TLA: 'language',\n    TCR: 'copyright',\n    WCP: 'license',\n    TEN: 'encodedby',\n    TSS: 'encodersettings',\n    WAR: 'website',\n    PCS: 'podcast',\n    TCP: \"compilation\",\n    TDR: 'date',\n    TS2: 'albumartistsort',\n    TSA: 'albumsort',\n    TSC: 'composersort',\n    TSP: 'artistsort',\n    TST: 'titlesort',\n    WFD: 'podcasturl',\n    TBP: 'bpm'\n};\nexport class ID3v22TagMapper extends CaseInsensitiveTagMap {\n    constructor() {\n        super(['ID3v2.2'], id3v22TagMap);\n    }\n}\n//# sourceMappingURL=ID3v22TagMapper.js.map","import { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap.js';\n/**\n * ID3v2.2 tag mappings\n */\nconst apev2TagMap = {\n    Title: 'title',\n    Artist: 'artist',\n    Artists: 'artists',\n    'Album Artist': 'albumartist',\n    Album: 'album',\n    Year: 'date',\n    Originalyear: 'originalyear',\n    Originaldate: 'originaldate',\n    Releasedate: 'releasedate',\n    Comment: 'comment',\n    Track: 'track',\n    Disc: 'disk',\n    DISCNUMBER: 'disk', // ToDo: backwards compatibility', valid tag?\n    Genre: 'genre',\n    'Cover Art (Front)': 'picture',\n    'Cover Art (Back)': 'picture',\n    Composer: 'composer',\n    Lyrics: 'lyrics',\n    ALBUMSORT: 'albumsort',\n    TITLESORT: 'titlesort',\n    WORK: 'work',\n    ARTISTSORT: 'artistsort',\n    ALBUMARTISTSORT: 'albumartistsort',\n    COMPOSERSORT: 'composersort',\n    Lyricist: 'lyricist',\n    Writer: 'writer',\n    Conductor: 'conductor',\n    // 'Performer=artist (instrument)': 'performer:instrument',\n    MixArtist: 'remixer',\n    Arranger: 'arranger',\n    Engineer: 'engineer',\n    Producer: 'producer',\n    DJMixer: 'djmixer',\n    Mixer: 'mixer',\n    Label: 'label',\n    Grouping: 'grouping',\n    Subtitle: 'subtitle',\n    DiscSubtitle: 'discsubtitle',\n    Compilation: 'compilation',\n    BPM: 'bpm',\n    Mood: 'mood',\n    Media: 'media',\n    CatalogNumber: 'catalognumber',\n    MUSICBRAINZ_ALBUMSTATUS: 'releasestatus',\n    MUSICBRAINZ_ALBUMTYPE: 'releasetype',\n    RELEASECOUNTRY: 'releasecountry',\n    Script: 'script',\n    Language: 'language',\n    Copyright: 'copyright',\n    LICENSE: 'license',\n    EncodedBy: 'encodedby',\n    EncoderSettings: 'encodersettings',\n    Barcode: 'barcode',\n    ISRC: 'isrc',\n    ASIN: 'asin',\n    musicbrainz_trackid: 'musicbrainz_recordingid',\n    musicbrainz_releasetrackid: 'musicbrainz_trackid',\n    MUSICBRAINZ_ALBUMID: 'musicbrainz_albumid',\n    MUSICBRAINZ_ARTISTID: 'musicbrainz_artistid',\n    MUSICBRAINZ_ALBUMARTISTID: 'musicbrainz_albumartistid',\n    MUSICBRAINZ_RELEASEGROUPID: 'musicbrainz_releasegroupid',\n    MUSICBRAINZ_WORKID: 'musicbrainz_workid',\n    MUSICBRAINZ_TRMID: 'musicbrainz_trmid',\n    MUSICBRAINZ_DISCID: 'musicbrainz_discid',\n    Acoustid_Id: 'acoustid_id',\n    ACOUSTID_FINGERPRINT: 'acoustid_fingerprint',\n    MUSICIP_PUID: 'musicip_puid',\n    Weblink: 'website',\n    REPLAYGAIN_TRACK_GAIN: 'replaygain_track_gain',\n    REPLAYGAIN_TRACK_PEAK: 'replaygain_track_peak',\n    MP3GAIN_MINMAX: 'replaygain_track_minmax',\n    MP3GAIN_UNDO: 'replaygain_undo'\n};\nexport class APEv2TagMapper extends CaseInsensitiveTagMap {\n    constructor() {\n        super(['APEv2'], apev2TagMap);\n    }\n}\n//# sourceMappingURL=APEv2TagMapper.js.map","import { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap.js';\n/**\n * Ref: https://github.com/sergiomb2/libmp4v2/wiki/iTunesMetadata\n */\nconst mp4TagMap = {\n    '©nam': 'title',\n    '©ART': 'artist',\n    aART: 'albumartist',\n    /**\n     * ToDo: Album artist seems to be stored here while Picard documentation says: aART\n     */\n    '----:com.apple.iTunes:Band': 'albumartist',\n    '©alb': 'album',\n    '©day': 'date',\n    '©cmt': 'comment',\n    '©com': 'comment',\n    trkn: 'track',\n    disk: 'disk',\n    '©gen': 'genre',\n    covr: 'picture',\n    '©wrt': 'composer',\n    '©lyr': 'lyrics',\n    soal: 'albumsort',\n    sonm: 'titlesort',\n    soar: 'artistsort',\n    soaa: 'albumartistsort',\n    soco: 'composersort',\n    '----:com.apple.iTunes:LYRICIST': 'lyricist',\n    '----:com.apple.iTunes:CONDUCTOR': 'conductor',\n    '----:com.apple.iTunes:REMIXER': 'remixer',\n    '----:com.apple.iTunes:ENGINEER': 'engineer',\n    '----:com.apple.iTunes:PRODUCER': 'producer',\n    '----:com.apple.iTunes:DJMIXER': 'djmixer',\n    '----:com.apple.iTunes:MIXER': 'mixer',\n    '----:com.apple.iTunes:LABEL': 'label',\n    '©grp': 'grouping',\n    '----:com.apple.iTunes:SUBTITLE': 'subtitle',\n    '----:com.apple.iTunes:DISCSUBTITLE': 'discsubtitle',\n    cpil: 'compilation',\n    tmpo: 'bpm',\n    '----:com.apple.iTunes:MOOD': 'mood',\n    '----:com.apple.iTunes:MEDIA': 'media',\n    '----:com.apple.iTunes:CATALOGNUMBER': 'catalognumber',\n    tvsh: 'tvShow',\n    tvsn: 'tvSeason',\n    tves: 'tvEpisode',\n    sosn: 'tvShowSort',\n    tven: 'tvEpisodeId',\n    tvnn: 'tvNetwork',\n    pcst: 'podcast',\n    purl: 'podcasturl',\n    '----:com.apple.iTunes:MusicBrainz Album Status': 'releasestatus',\n    '----:com.apple.iTunes:MusicBrainz Album Type': 'releasetype',\n    '----:com.apple.iTunes:MusicBrainz Album Release Country': 'releasecountry',\n    '----:com.apple.iTunes:SCRIPT': 'script',\n    '----:com.apple.iTunes:LANGUAGE': 'language',\n    cprt: 'copyright',\n    '©cpy': 'copyright',\n    '----:com.apple.iTunes:LICENSE': 'license',\n    '©too': 'encodedby',\n    pgap: 'gapless',\n    '----:com.apple.iTunes:BARCODE': 'barcode',\n    '----:com.apple.iTunes:ISRC': 'isrc',\n    '----:com.apple.iTunes:ASIN': 'asin',\n    '----:com.apple.iTunes:NOTES': 'comment',\n    '----:com.apple.iTunes:MusicBrainz Track Id': 'musicbrainz_recordingid',\n    '----:com.apple.iTunes:MusicBrainz Release Track Id': 'musicbrainz_trackid',\n    '----:com.apple.iTunes:MusicBrainz Album Id': 'musicbrainz_albumid',\n    '----:com.apple.iTunes:MusicBrainz Artist Id': 'musicbrainz_artistid',\n    '----:com.apple.iTunes:MusicBrainz Album Artist Id': 'musicbrainz_albumartistid',\n    '----:com.apple.iTunes:MusicBrainz Release Group Id': 'musicbrainz_releasegroupid',\n    '----:com.apple.iTunes:MusicBrainz Work Id': 'musicbrainz_workid',\n    '----:com.apple.iTunes:MusicBrainz TRM Id': 'musicbrainz_trmid',\n    '----:com.apple.iTunes:MusicBrainz Disc Id': 'musicbrainz_discid',\n    '----:com.apple.iTunes:Acoustid Id': 'acoustid_id',\n    '----:com.apple.iTunes:Acoustid Fingerprint': 'acoustid_fingerprint',\n    '----:com.apple.iTunes:MusicIP PUID': 'musicip_puid',\n    '----:com.apple.iTunes:fingerprint': 'musicip_fingerprint',\n    '----:com.apple.iTunes:replaygain_track_gain': 'replaygain_track_gain',\n    '----:com.apple.iTunes:replaygain_track_peak': 'replaygain_track_peak',\n    '----:com.apple.iTunes:replaygain_album_gain': 'replaygain_album_gain',\n    '----:com.apple.iTunes:replaygain_album_peak': 'replaygain_album_peak',\n    '----:com.apple.iTunes:replaygain_track_minmax': 'replaygain_track_minmax',\n    '----:com.apple.iTunes:replaygain_album_minmax': 'replaygain_album_minmax',\n    '----:com.apple.iTunes:replaygain_undo': 'replaygain_undo',\n    // Additional mappings:\n    gnre: 'genre', // ToDo: check mapping\n    '----:com.apple.iTunes:ALBUMARTISTSORT': 'albumartistsort',\n    '----:com.apple.iTunes:ARTISTS': 'artists',\n    '----:com.apple.iTunes:ORIGINALDATE': 'originaldate',\n    '----:com.apple.iTunes:ORIGINALYEAR': 'originalyear',\n    '----:com.apple.iTunes:RELEASEDATE': 'releasedate',\n    // '----:com.apple.iTunes:PERFORMER': 'performer'\n    desc: 'description',\n    ldes: 'longDescription',\n    '©mvn': 'movement',\n    '©mvi': 'movementIndex',\n    '©mvc': 'movementTotal',\n    '©wrk': 'work',\n    catg: 'category',\n    egid: 'podcastId',\n    hdvd: 'hdVideo',\n    keyw: 'keywords',\n    shwm: 'showMovement',\n    stik: 'stik',\n    rate: 'rating'\n};\nexport const tagType = 'iTunes';\nexport class MP4TagMapper extends CaseInsensitiveTagMap {\n    constructor() {\n        super([tagType], mp4TagMap);\n    }\n    postMap(tag, _warnings) {\n        switch (tag.id) {\n            case 'rate':\n                tag.value = {\n                    source: undefined,\n                    rating: Number.parseFloat(tag.value) / 100\n                };\n                break;\n        }\n    }\n}\n//# sourceMappingURL=MP4TagMapper.js.map","import { CommonTagMapper } from '../../common/GenericTagMapper.js';\n/**\n * Vorbis tag mappings\n *\n * Mapping from native header format to one or possibly more 'common' entries\n * The common entries aim to read the same information from different media files\n * independent of the underlying format\n */\nconst vorbisTagMap = {\n    TITLE: 'title',\n    ARTIST: 'artist',\n    ARTISTS: 'artists',\n    ALBUMARTIST: 'albumartist',\n    'ALBUM ARTIST': 'albumartist',\n    ALBUM: 'album',\n    DATE: 'date',\n    ORIGINALDATE: 'originaldate',\n    ORIGINALYEAR: 'originalyear',\n    RELEASEDATE: 'releasedate',\n    COMMENT: 'comment',\n    TRACKNUMBER: 'track',\n    DISCNUMBER: 'disk',\n    GENRE: 'genre',\n    METADATA_BLOCK_PICTURE: 'picture',\n    COMPOSER: 'composer',\n    LYRICS: 'lyrics',\n    ALBUMSORT: 'albumsort',\n    TITLESORT: 'titlesort',\n    WORK: 'work',\n    ARTISTSORT: 'artistsort',\n    ALBUMARTISTSORT: 'albumartistsort',\n    COMPOSERSORT: 'composersort',\n    LYRICIST: 'lyricist',\n    WRITER: 'writer',\n    CONDUCTOR: 'conductor',\n    // 'PERFORMER=artist (instrument)': 'performer:instrument', // ToDo\n    REMIXER: 'remixer',\n    ARRANGER: 'arranger',\n    ENGINEER: 'engineer',\n    PRODUCER: 'producer',\n    DJMIXER: 'djmixer',\n    MIXER: 'mixer',\n    LABEL: 'label',\n    GROUPING: 'grouping',\n    SUBTITLE: 'subtitle',\n    DISCSUBTITLE: 'discsubtitle',\n    TRACKTOTAL: 'totaltracks',\n    DISCTOTAL: 'totaldiscs',\n    COMPILATION: 'compilation',\n    RATING: 'rating',\n    BPM: 'bpm',\n    KEY: 'key',\n    MOOD: 'mood',\n    MEDIA: 'media',\n    CATALOGNUMBER: 'catalognumber',\n    RELEASESTATUS: 'releasestatus',\n    RELEASETYPE: 'releasetype',\n    RELEASECOUNTRY: 'releasecountry',\n    SCRIPT: 'script',\n    LANGUAGE: 'language',\n    COPYRIGHT: 'copyright',\n    LICENSE: 'license',\n    ENCODEDBY: 'encodedby',\n    ENCODERSETTINGS: 'encodersettings',\n    BARCODE: 'barcode',\n    ISRC: 'isrc',\n    ASIN: 'asin',\n    MUSICBRAINZ_TRACKID: 'musicbrainz_recordingid',\n    MUSICBRAINZ_RELEASETRACKID: 'musicbrainz_trackid',\n    MUSICBRAINZ_ALBUMID: 'musicbrainz_albumid',\n    MUSICBRAINZ_ARTISTID: 'musicbrainz_artistid',\n    MUSICBRAINZ_ALBUMARTISTID: 'musicbrainz_albumartistid',\n    MUSICBRAINZ_RELEASEGROUPID: 'musicbrainz_releasegroupid',\n    MUSICBRAINZ_WORKID: 'musicbrainz_workid',\n    MUSICBRAINZ_TRMID: 'musicbrainz_trmid',\n    MUSICBRAINZ_DISCID: 'musicbrainz_discid',\n    ACOUSTID_ID: 'acoustid_id',\n    ACOUSTID_ID_FINGERPRINT: 'acoustid_fingerprint',\n    MUSICIP_PUID: 'musicip_puid',\n    // 'FINGERPRINT=MusicMagic Fingerprint {fingerprint}': 'musicip_fingerprint', // ToDo\n    WEBSITE: 'website',\n    NOTES: 'notes',\n    TOTALTRACKS: 'totaltracks',\n    TOTALDISCS: 'totaldiscs',\n    // Discogs\n    DISCOGS_ARTIST_ID: 'discogs_artist_id',\n    DISCOGS_ARTISTS: 'artists',\n    DISCOGS_ARTIST_NAME: 'artists',\n    DISCOGS_ALBUM_ARTISTS: 'albumartist',\n    DISCOGS_CATALOG: 'catalognumber',\n    DISCOGS_COUNTRY: 'releasecountry',\n    DISCOGS_DATE: 'originaldate',\n    DISCOGS_LABEL: 'label',\n    DISCOGS_LABEL_ID: 'discogs_label_id',\n    DISCOGS_MASTER_RELEASE_ID: 'discogs_master_release_id',\n    DISCOGS_RATING: 'discogs_rating',\n    DISCOGS_RELEASED: 'date',\n    DISCOGS_RELEASE_ID: 'discogs_release_id',\n    DISCOGS_VOTES: 'discogs_votes',\n    CATALOGID: 'catalognumber',\n    STYLE: 'genre',\n    //\n    REPLAYGAIN_TRACK_GAIN: 'replaygain_track_gain',\n    REPLAYGAIN_TRACK_PEAK: 'replaygain_track_peak',\n    REPLAYGAIN_ALBUM_GAIN: 'replaygain_album_gain',\n    REPLAYGAIN_ALBUM_PEAK: 'replaygain_album_peak',\n    // To Sure if these (REPLAYGAIN_MINMAX, REPLAYGAIN_ALBUM_MINMAX & REPLAYGAIN_UNDO) are used for Vorbis:\n    REPLAYGAIN_MINMAX: 'replaygain_track_minmax',\n    REPLAYGAIN_ALBUM_MINMAX: 'replaygain_album_minmax',\n    REPLAYGAIN_UNDO: 'replaygain_undo'\n};\nexport class VorbisTagMapper extends CommonTagMapper {\n    static toRating(email, rating, maxScore) {\n        return {\n            source: email ? email.toLowerCase() : undefined,\n            rating: (Number.parseFloat(rating) / maxScore) * CommonTagMapper.maxRatingScore\n        };\n    }\n    constructor() {\n        super(['vorbis'], vorbisTagMap);\n    }\n    postMap(tag) {\n        if (tag.id === 'RATING') {\n            // The way Winamp 5.666 assigns rating\n            tag.value = VorbisTagMapper.toRating(undefined, tag.value, 100);\n        }\n        else if (tag.id.indexOf('RATING:') === 0) {\n            const keys = tag.id.split(':');\n            tag.value = VorbisTagMapper.toRating(keys[1], tag.value, 1);\n            tag.id = keys[0];\n        }\n    }\n}\n//# sourceMappingURL=VorbisTagMapper.js.map","import { CommonTagMapper } from '../common/GenericTagMapper.js';\n/**\n * RIFF Info Tags; part of the EXIF 2.3\n * Ref: http://owl.phy.queensu.ca/~phil/exiftool/TagNames/RIFF.html#Info\n */\nexport const riffInfoTagMap = {\n    IART: 'artist', // Artist\n    ICRD: 'date', // DateCreated\n    INAM: 'title', // Title\n    TITL: 'title',\n    IPRD: 'album', // Product\n    ITRK: 'track',\n    IPRT: 'track', // Additional tag for track index\n    COMM: 'comment', // Comments\n    ICMT: 'comment', // Country\n    ICNT: 'releasecountry',\n    GNRE: 'genre', // Genre\n    IWRI: 'writer', // WrittenBy\n    RATE: 'rating',\n    YEAR: 'year',\n    ISFT: 'encodedby', // Software\n    CODE: 'encodedby', // EncodedBy\n    TURL: 'website', // URL,\n    IGNR: 'genre', // Genre\n    IENG: 'engineer', // Engineer\n    ITCH: 'technician', // Technician\n    IMED: 'media', // Original Media\n    IRPD: 'album' // Product, where the file was intended for\n};\nexport class RiffInfoTagMapper extends CommonTagMapper {\n    constructor() {\n        super(['exif'], riffInfoTagMap);\n    }\n}\n//# sourceMappingURL=RiffInfoTagMap.js.map","import { CaseInsensitiveTagMap } from '../common/CaseInsensitiveTagMap.js';\n/**\n * EBML Tag map\n */\nconst ebmlTagMap = {\n    'segment:title': 'title',\n    'album:ARTIST': 'albumartist',\n    'album:ARTISTSORT': 'albumartistsort',\n    'album:TITLE': 'album',\n    'album:DATE_RECORDED': 'originaldate',\n    'album:DATE_RELEASED': 'releasedate',\n    'album:PART_NUMBER': 'disk',\n    'album:TOTAL_PARTS': 'totaltracks',\n    'track:ARTIST': 'artist',\n    'track:ARTISTSORT': 'artistsort',\n    'track:TITLE': 'title',\n    'track:PART_NUMBER': 'track',\n    'track:MUSICBRAINZ_TRACKID': 'musicbrainz_recordingid',\n    'track:MUSICBRAINZ_ALBUMID': 'musicbrainz_albumid',\n    'track:MUSICBRAINZ_ARTISTID': 'musicbrainz_artistid',\n    'track:PUBLISHER': 'label',\n    'track:GENRE': 'genre',\n    'track:ENCODER': 'encodedby',\n    'track:ENCODER_OPTIONS': 'encodersettings',\n    'edition:TOTAL_PARTS': 'totaldiscs',\n    picture: 'picture'\n};\nexport class MatroskaTagMapper extends CaseInsensitiveTagMap {\n    constructor() {\n        super(['matroska'], ebmlTagMap);\n    }\n}\n//# sourceMappingURL=MatroskaTagMapper.js.map","import { CommonTagMapper } from '../common/GenericTagMapper.js';\n/**\n * ID3v1 tag mappings\n */\nconst tagMap = {\n    NAME: 'title',\n    AUTH: 'artist',\n    '(c) ': 'copyright',\n    ANNO: 'comment'\n};\nexport class AiffTagMapper extends CommonTagMapper {\n    constructor() {\n        super(['AIFF'], tagMap);\n    }\n}\n//# sourceMappingURL=AiffTagMap.js.map","import { ID3v1TagMapper } from '../id3v1/ID3v1TagMap.js';\nimport { ID3v24TagMapper } from '../id3v2/ID3v24TagMapper.js';\nimport { AsfTagMapper } from '../asf/AsfTagMapper.js';\nimport { ID3v22TagMapper } from '../id3v2/ID3v22TagMapper.js';\nimport { APEv2TagMapper } from '../apev2/APEv2TagMapper.js';\nimport { MP4TagMapper } from '../mp4/MP4TagMapper.js';\nimport { VorbisTagMapper } from '../ogg/vorbis/VorbisTagMapper.js';\nimport { RiffInfoTagMapper } from '../riff/RiffInfoTagMap.js';\nimport { MatroskaTagMapper } from '../matroska/MatroskaTagMapper.js';\nimport { AiffTagMapper } from '../aiff/AiffTagMap.js';\nimport { InternalParserError } from '../ParseError.js';\nexport class CombinedTagMapper {\n    constructor() {\n        this.tagMappers = {};\n        [\n            new ID3v1TagMapper(),\n            new ID3v22TagMapper(),\n            new ID3v24TagMapper(),\n            new MP4TagMapper(),\n            new MP4TagMapper(),\n            new VorbisTagMapper(),\n            new APEv2TagMapper(),\n            new AsfTagMapper(),\n            new RiffInfoTagMapper(),\n            new MatroskaTagMapper(),\n            new AiffTagMapper()\n        ].forEach(mapper => {\n            this.registerTagMapper(mapper);\n        });\n    }\n    /**\n     * Convert native to generic (common) tags\n     * @param tagType Originating tag format\n     * @param tag     Native tag to map to a generic tag id\n     * @param warnings\n     * @return Generic tag result (output of this function)\n     */\n    mapTag(tagType, tag, warnings) {\n        const tagMapper = this.tagMappers[tagType];\n        if (tagMapper) {\n            return this.tagMappers[tagType].mapGenericTag(tag, warnings);\n        }\n        throw new InternalParserError(`No generic tag mapper defined for tag-format: ${tagType}`);\n    }\n    registerTagMapper(genericTagMapper) {\n        for (const tagType of genericTagMapper.tagTypes) {\n            this.tagMappers[tagType] = genericTagMapper;\n        }\n    }\n}\n//# sourceMappingURL=CombinedTagMapper.js.map","import { TrackTypeValueToKeyMap, } from '../type.js';\nimport initDebug from 'debug';\nimport { isSingleton, isUnique } from './GenericTagTypes.js';\nimport { CombinedTagMapper } from './CombinedTagMapper.js';\nimport { CommonTagMapper } from './GenericTagMapper.js';\nimport { toRatio } from './Util.js';\nimport { fileTypeFromBuffer } from 'file-type';\nimport { parseLrc } from '../lrc/LyricsParser.js';\nconst debug = initDebug('music-metadata:collector');\nconst TagPriority = ['matroska', 'APEv2', 'vorbis', 'ID3v2.4', 'ID3v2.3', 'ID3v2.2', 'exif', 'asf', 'iTunes', 'AIFF', 'ID3v1'];\n/**\n * Provided to the parser to uodate the metadata result.\n * Responsible for triggering async updates\n */\nexport class MetadataCollector {\n    constructor(opts) {\n        this.format = {\n            tagTypes: [],\n            trackInfo: []\n        };\n        this.native = {};\n        this.common = {\n            track: { no: null, of: null },\n            disk: { no: null, of: null },\n            movementIndex: { no: null, of: null }\n        };\n        this.quality = {\n            warnings: []\n        };\n        /**\n         * Keeps track of origin priority for each mapped id\n         */\n        this.commonOrigin = {};\n        /**\n         * Maps a tag type to a priority\n         */\n        this.originPriority = {};\n        this.tagMapper = new CombinedTagMapper();\n        this.opts = opts;\n        let priority = 1;\n        for (const tagType of TagPriority) {\n            this.originPriority[tagType] = priority++;\n        }\n        this.originPriority.artificial = 500; // Filled using alternative tags\n        this.originPriority.id3v1 = 600; // Consider as the worst because of the field length limit\n    }\n    /**\n     * @returns {boolean} true if one or more tags have been found\n     */\n    hasAny() {\n        return Object.keys(this.native).length > 0;\n    }\n    addStreamInfo(streamInfo) {\n        debug(`streamInfo: type=${streamInfo.type ? TrackTypeValueToKeyMap[streamInfo.type] : '?'}, codec=${streamInfo.codecName}`);\n        this.format.trackInfo.push(streamInfo);\n    }\n    setFormat(key, value) {\n        debug(`format: ${key} = ${value}`);\n        this.format[key] = value; // as any to override readonly\n        if (this.opts?.observer) {\n            this.opts.observer({ metadata: this, tag: { type: 'format', id: key, value } });\n        }\n    }\n    setAudioOnly() {\n        this.setFormat('hasAudio', true);\n        this.setFormat('hasVideo', false);\n    }\n    async addTag(tagType, tagId, value) {\n        debug(`tag ${tagType}.${tagId} = ${value}`);\n        if (!this.native[tagType]) {\n            this.format.tagTypes.push(tagType);\n            this.native[tagType] = [];\n        }\n        this.native[tagType].push({ id: tagId, value });\n        await this.toCommon(tagType, tagId, value);\n    }\n    addWarning(warning) {\n        this.quality.warnings.push({ message: warning });\n    }\n    async postMap(tagType, tag) {\n        // Common tag (alias) found\n        // check if we need to do something special with common tag\n        // if the event has been aliased then we need to clean it before\n        // it is emitted to the user. e.g. genre (20) -> Electronic\n        switch (tag.id) {\n            case 'artist':\n                if (this.commonOrigin.artist === this.originPriority[tagType]) {\n                    // Assume the artist field is used as artists\n                    return this.postMap('artificial', { id: 'artists', value: tag.value });\n                }\n                if (!this.common.artists) {\n                    // Fill artists using artist source\n                    this.setGenericTag('artificial', { id: 'artists', value: tag.value });\n                }\n                break;\n            case 'artists':\n                if (!this.common.artist || this.commonOrigin.artist === this.originPriority.artificial) {\n                    if (!this.common.artists || this.common.artists.indexOf(tag.value) === -1) {\n                        // Fill artist using artists source\n                        const artists = (this.common.artists || []).concat([tag.value]);\n                        const value = joinArtists(artists);\n                        const artistTag = { id: 'artist', value };\n                        this.setGenericTag('artificial', artistTag);\n                    }\n                }\n                break;\n            case 'picture':\n                return this.postFixPicture(tag.value).then(picture => {\n                    if (picture !== null) {\n                        tag.value = picture;\n                        this.setGenericTag(tagType, tag);\n                    }\n                });\n            case 'totaltracks':\n                this.common.track.of = CommonTagMapper.toIntOrNull(tag.value);\n                return;\n            case 'totaldiscs':\n                this.common.disk.of = CommonTagMapper.toIntOrNull(tag.value);\n                return;\n            case 'movementTotal':\n                this.common.movementIndex.of = CommonTagMapper.toIntOrNull(tag.value);\n                return;\n            case 'track':\n            case 'disk':\n            case 'movementIndex': {\n                const of = this.common[tag.id].of; // store of value, maybe maybe overwritten\n                this.common[tag.id] = CommonTagMapper.normalizeTrack(tag.value);\n                this.common[tag.id].of = of != null ? of : this.common[tag.id].of;\n                return;\n            }\n            case 'bpm':\n            case 'year':\n            case 'originalyear':\n                tag.value = Number.parseInt(tag.value, 10);\n                break;\n            case 'date': {\n                // ToDo: be more strict on 'YYYY...'\n                const year = Number.parseInt(tag.value.substr(0, 4), 10);\n                if (!Number.isNaN(year)) {\n                    this.common.year = year;\n                }\n                break;\n            }\n            case 'discogs_label_id':\n            case 'discogs_release_id':\n            case 'discogs_master_release_id':\n            case 'discogs_artist_id':\n            case 'discogs_votes':\n                tag.value = typeof tag.value === 'string' ? Number.parseInt(tag.value, 10) : tag.value;\n                break;\n            case 'replaygain_track_gain':\n            case 'replaygain_track_peak':\n            case 'replaygain_album_gain':\n            case 'replaygain_album_peak':\n                tag.value = toRatio(tag.value);\n                break;\n            case 'replaygain_track_minmax':\n                tag.value = tag.value.split(',').map(v => Number.parseInt(v, 10));\n                break;\n            case 'replaygain_undo': {\n                const minMix = tag.value.split(',').map(v => Number.parseInt(v, 10));\n                tag.value = {\n                    leftChannel: minMix[0],\n                    rightChannel: minMix[1]\n                };\n                break;\n            }\n            case 'gapless': // iTunes gap-less flag\n            case 'compilation':\n            case 'podcast':\n            case 'showMovement':\n                tag.value = tag.value === '1' || tag.value === 1; // boolean\n                break;\n            case 'isrc': { // Only keep unique values\n                const commonTag = this.common[tag.id];\n                if (commonTag && commonTag.indexOf(tag.value) !== -1)\n                    return;\n                break;\n            }\n            case 'comment':\n                if (typeof tag.value === 'string') {\n                    tag.value = { text: tag.value };\n                }\n                if (tag.value.descriptor === 'iTunPGAP') {\n                    this.setGenericTag(tagType, { id: 'gapless', value: tag.value.text === '1' });\n                }\n                break;\n            case 'lyrics':\n                if (typeof tag.value === 'string') {\n                    tag.value = parseLrc(tag.value);\n                }\n                break;\n            default:\n            // nothing to do\n        }\n        if (tag.value !== null) {\n            this.setGenericTag(tagType, tag);\n        }\n    }\n    /**\n     * Convert native tags to common tags\n     * @returns {IAudioMetadata} Native + common tags\n     */\n    toCommonMetadata() {\n        return {\n            format: this.format,\n            native: this.native,\n            quality: this.quality,\n            common: this.common\n        };\n    }\n    /**\n     * Fix some common issues with picture object\n     * @param picture Picture\n     */\n    async postFixPicture(picture) {\n        if (picture.data && picture.data.length > 0) {\n            if (!picture.format) {\n                const fileType = await fileTypeFromBuffer(Uint8Array.from(picture.data)); // ToDO: remove Buffer\n                if (fileType) {\n                    picture.format = fileType.mime;\n                }\n                else {\n                    return null;\n                }\n            }\n            picture.format = picture.format.toLocaleLowerCase();\n            switch (picture.format) {\n                case 'image/jpg':\n                    picture.format = 'image/jpeg'; // ToDo: register warning\n            }\n            return picture;\n        }\n        this.addWarning(\"Empty picture tag found\");\n        return null;\n    }\n    /**\n     * Convert native tag to common tags\n     */\n    async toCommon(tagType, tagId, value) {\n        const tag = { id: tagId, value };\n        const genericTag = this.tagMapper.mapTag(tagType, tag, this);\n        if (genericTag) {\n            await this.postMap(tagType, genericTag);\n        }\n    }\n    /**\n     * Set generic tag\n     */\n    setGenericTag(tagType, tag) {\n        debug(`common.${tag.id} = ${tag.value}`);\n        const prio0 = this.commonOrigin[tag.id] || 1000;\n        const prio1 = this.originPriority[tagType];\n        if (isSingleton(tag.id)) {\n            if (prio1 <= prio0) {\n                this.common[tag.id] = tag.value;\n                this.commonOrigin[tag.id] = prio1;\n            }\n            else {\n                return debug(`Ignore native tag (singleton): ${tagType}.${tag.id} = ${tag.value}`);\n            }\n        }\n        else {\n            if (prio1 === prio0) {\n                if (!isUnique(tag.id) || this.common[tag.id].indexOf(tag.value) === -1) {\n                    this.common[tag.id].push(tag.value);\n                }\n                else {\n                    debug(`Ignore duplicate value: ${tagType}.${tag.id} = ${tag.value}`);\n                }\n                // no effect? this.commonOrigin[tag.id] = prio1;\n            }\n            else if (prio1 < prio0) {\n                this.common[tag.id] = [tag.value];\n                this.commonOrigin[tag.id] = prio1;\n            }\n            else {\n                return debug(`Ignore native tag (list): ${tagType}.${tag.id} = ${tag.value}`);\n            }\n        }\n        if (this.opts?.observer) {\n            this.opts.observer({ metadata: this, tag: { type: 'common', id: tag.id, value: tag.value } });\n        }\n        // ToDo: trigger metadata event\n    }\n}\nexport function joinArtists(artists) {\n    if (artists.length > 2) {\n        return `${artists.slice(0, artists.length - 1).join(', ')} & ${artists[artists.length - 1]}`;\n    }\n    return artists.join(' & ');\n}\n//# sourceMappingURL=MetadataCollector.js.map","import { LyricsContentType, TimestampFormat } from '../type.js';\n/**\n * Parse LRC (Lyrics) formatted text\n * Ref: https://en.wikipedia.org/wiki/LRC_(file_format)\n * @param lrcString\n */\nexport function parseLrc(lrcString) {\n    const lines = lrcString.split('\\n');\n    const syncText = [];\n    // Regular expression to match LRC timestamps (e.g., [00:45.52] or [00:45.520])\n    const timestampRegex = /\\[(\\d{2}):(\\d{2})\\.(\\d{2,3})\\]/;\n    for (const line of lines) {\n        const match = line.match(timestampRegex);\n        if (match) {\n            const minutes = Number.parseInt(match[1], 10);\n            const seconds = Number.parseInt(match[2], 10);\n            const millisecondsStr = match[3];\n            let milliseconds;\n            if (millisecondsStr.length === 3) {\n                //  (e.g., .521 = 521 millseconds)\n                milliseconds = Number.parseInt(millisecondsStr, 10);\n            }\n            else {\n                //  (e.g., .52 = 520 millseconds)\n                milliseconds = Number.parseInt(millisecondsStr, 10) * 10;\n            }\n            // Convert the timestamp to milliseconds, as per TimestampFormat.milliseconds\n            const timestamp = (minutes * 60 + seconds) * 1000 + milliseconds;\n            // Get the text portion of the line (e.g., \"あの蝶は自由になれたかな\")\n            const text = line.replace(timestampRegex, '').trim();\n            syncText.push({ timestamp, text });\n        }\n    }\n    // Creating the ILyricsTag object\n    return {\n        contentType: LyricsContentType.lyrics,\n        timeStampFormat: TimestampFormat.milliseconds,\n        syncText,\n    };\n}\n//# sourceMappingURL=LyricsParser.js.map","export const mpegParserLoader = {\n    parserType: 'mpeg',\n    extensions: ['.mp2', '.mp3', '.m2a', '.aac', 'aacp'],\n    mimeTypes: ['audio/mpeg', 'audio/mp3', 'audio/aacs', 'audio/aacp'],\n    async load() {\n        return (await import('./MpegParser.js')).MpegParser;\n    }\n};\n//# sourceMappingURL=MpegLoader.js.map","export const apeParserLoader = {\n    parserType: 'apev2',\n    extensions: ['.ape'],\n    mimeTypes: ['audio/ape', 'audio/monkeys-audio'],\n    async load() {\n        return (await import('./APEv2Parser.js')).APEv2Parser;\n    }\n};\n//# sourceMappingURL=Apev2Loader.js.map","export const asfParserLoader = {\n    parserType: 'asf',\n    extensions: ['.asf'],\n    mimeTypes: ['audio/ms-wma', 'video/ms-wmv', 'audio/ms-asf', 'video/ms-asf', 'application/vnd.ms-asf'],\n    async load() {\n        return (await import('./AsfParser.js')).AsfParser;\n    }\n};\n//# sourceMappingURL=AsfLoader.js.map","export const dsdiffParserLoader = {\n    parserType: 'dsdiff',\n    extensions: ['.dff'],\n    mimeTypes: ['audio/dsf', 'audio/dsd'],\n    async load() {\n        return (await import('./DsdiffParser.js')).DsdiffParser;\n    }\n};\n//# sourceMappingURL=DsdiffLoader.js.map","export const aiffParserLoader = {\n    parserType: 'aiff',\n    extensions: ['.aif', 'aiff', 'aifc'],\n    mimeTypes: ['audio/aiff', 'audio/aif', 'audio/aifc', 'application/aiff'],\n    async load() {\n        return (await import('./AiffParser.js')).AIFFParser;\n    }\n};\n//# sourceMappingURL=AiffLoader.js.map","export const dsfParserLoader = {\n    parserType: 'dsf',\n    extensions: ['.dsf'],\n    mimeTypes: ['audio/dsf'],\n    async load() {\n        return (await import('./DsfParser.js')).DsfParser;\n    }\n};\n//# sourceMappingURL=DsfLoader.js.map","export const flacParserLoader = {\n    parserType: 'flac',\n    extensions: ['.flac'],\n    mimeTypes: ['audio/flac'],\n    async load() {\n        return (await import('./FlacParser.js')).FlacParser;\n    }\n};\n//# sourceMappingURL=FlacLoader.js.map","export const matroskaParserLoader = {\n    parserType: 'matroska',\n    extensions: ['.mka', '.mkv', '.mk3d', '.mks', 'webm'],\n    mimeTypes: ['audio/matroska', 'video/matroska', 'audio/webm', 'video/webm'],\n    async load() {\n        return (await import('./MatroskaParser.js')).MatroskaParser;\n    }\n};\n//# sourceMappingURL=MatroskaLoader.js.map","export const mp4ParserLoader = {\n    parserType: 'mp4',\n    extensions: ['.mp4', '.m4a', '.m4b', '.m4pa', 'm4v', 'm4r', '3gp'],\n    mimeTypes: ['audio/mp4', 'audio/m4a', 'video/m4v', 'video/mp4'],\n    async load() {\n        return (await import('./MP4Parser.js')).MP4Parser;\n    }\n};\n//# sourceMappingURL=Mp4Loader.js.map","export const musepackParserLoader = {\n    parserType: 'musepack',\n    extensions: ['.mpc'],\n    mimeTypes: ['audio/musepack'],\n    async load() {\n        return (await import('./MusepackParser.js')).MusepackParser;\n    }\n};\n//# sourceMappingURL=MusepackLoader.js.map","export const oggParserLoader = {\n    parserType: 'ogg',\n    extensions: ['.ogg', '.ogv', '.oga', '.ogm', '.ogx', '.opus', '.spx'],\n    mimeTypes: ['audio/ogg', 'audio/opus', 'audio/speex', 'video/ogg'], // RFC 7845, RFC 6716, RFC 5574\n    async load() {\n        return (await import('./OggParser.js')).OggParser;\n    }\n};\n//# sourceMappingURL=OggLoader.js.map","export const wavpackParserLoader = {\n    parserType: 'wavpack',\n    extensions: ['.wv', '.wvp'],\n    mimeTypes: ['audio/wavpack'],\n    async load() {\n        return (await import('./WavPackParser.js')).WavPackParser;\n    }\n};\n//# sourceMappingURL=WavPackLoader.js.map","export const riffParserLoader = {\n    parserType: 'riff',\n    extensions: ['.wav', 'wave', '.bwf'],\n    mimeTypes: ['audio/vnd.wave', 'audio/wav', 'audio/wave'],\n    async load() {\n        return (await import('./WaveParser.js')).WaveParser;\n    }\n};\n//# sourceMappingURL=WaveLoader.js.map","import { fileTypeFromBuffer } from 'file-type';\nimport ContentType from 'content-type';\nimport { parse as mimeTypeParse } from 'media-typer';\nimport initDebug from 'debug';\nimport { MetadataCollector } from './common/MetadataCollector.js';\nimport { TrackType } from './type.js';\nimport { mpegParserLoader } from './mpeg/MpegLoader.js';\nimport { CouldNotDetermineFileTypeError, UnsupportedFileTypeError } from './ParseError.js';\nimport { apeParserLoader } from './apev2/Apev2Loader.js';\nimport { asfParserLoader } from './asf/AsfLoader.js';\nimport { dsdiffParserLoader } from './dsdiff/DsdiffLoader.js';\nimport { aiffParserLoader } from './aiff/AiffLoader.js';\nimport { dsfParserLoader } from './dsf/DsfLoader.js';\nimport { flacParserLoader } from './flac/FlacLoader.js';\nimport { matroskaParserLoader } from './matroska/MatroskaLoader.js';\nimport { mp4ParserLoader } from './mp4/Mp4Loader.js';\nimport { musepackParserLoader } from './musepack/MusepackLoader.js';\nimport { oggParserLoader } from './ogg/OggLoader.js';\nimport { wavpackParserLoader } from './wavpack/WavPackLoader.js';\nimport { riffParserLoader } from './wav/WaveLoader.js';\nimport { scanAppendingHeaders } from './core.js';\nconst debug = initDebug('music-metadata:parser:factory');\nexport function parseHttpContentType(contentType) {\n    const type = ContentType.parse(contentType);\n    const mime = mimeTypeParse(type.type);\n    return {\n        type: mime.type,\n        subtype: mime.subtype,\n        suffix: mime.suffix,\n        parameters: type.parameters\n    };\n}\nexport class ParserFactory {\n    constructor() {\n        this.parsers = [];\n        [\n            flacParserLoader,\n            mpegParserLoader,\n            apeParserLoader,\n            mp4ParserLoader,\n            matroskaParserLoader,\n            riffParserLoader,\n            oggParserLoader,\n            asfParserLoader,\n            aiffParserLoader,\n            wavpackParserLoader,\n            musepackParserLoader,\n            dsfParserLoader,\n            dsdiffParserLoader\n        ].forEach(parser => this.registerParser(parser));\n    }\n    registerParser(parser) {\n        this.parsers.push(parser);\n    }\n    async parse(tokenizer, parserLoader, opts) {\n        if (tokenizer.supportsRandomAccess()) {\n            debug('tokenizer supports random-access, scanning for appending headers');\n            await scanAppendingHeaders(tokenizer, opts);\n        }\n        else {\n            debug('tokenizer does not support random-access, cannot scan for appending headers');\n        }\n        if (!parserLoader) {\n            const buf = new Uint8Array(4100);\n            if (tokenizer.fileInfo.mimeType) {\n                parserLoader = this.findLoaderForContentType(tokenizer.fileInfo.mimeType);\n            }\n            if (!parserLoader && tokenizer.fileInfo.path) {\n                parserLoader = this.findLoaderForExtension(tokenizer.fileInfo.path);\n            }\n            if (!parserLoader) {\n                // Parser could not be determined on MIME-type or extension\n                debug('Guess parser on content...');\n                await tokenizer.peekBuffer(buf, { mayBeLess: true });\n                const guessedType = await fileTypeFromBuffer(buf, { mpegOffsetTolerance: 10 });\n                if (!guessedType || !guessedType.mime) {\n                    throw new CouldNotDetermineFileTypeError('Failed to determine audio format');\n                }\n                debug(`Guessed file type is mime=${guessedType.mime}, extension=${guessedType.ext}`);\n                parserLoader = this.findLoaderForContentType(guessedType.mime);\n                if (!parserLoader) {\n                    throw new UnsupportedFileTypeError(`Guessed MIME-type not supported: ${guessedType.mime}`);\n                }\n            }\n        }\n        // Parser found, execute parser\n        debug(`Loading ${parserLoader.parserType} parser...`);\n        const metadata = new MetadataCollector(opts);\n        const ParserImpl = await parserLoader.load();\n        const parser = new ParserImpl(metadata, tokenizer, opts ?? {});\n        debug(`Parser ${parserLoader.parserType} loaded`);\n        await parser.parse();\n        if (metadata.format.trackInfo) {\n            if (metadata.format.hasAudio === undefined) {\n                metadata.setFormat('hasAudio', !!metadata.format.trackInfo.find(track => track.type === TrackType.audio));\n            }\n            if (metadata.format.hasVideo === undefined) {\n                metadata.setFormat('hasVideo', !!metadata.format.trackInfo.find(track => track.type === TrackType.video));\n            }\n        }\n        return metadata.toCommonMetadata();\n    }\n    /**\n     * @param filePath - Path, filename or extension to audio file\n     * @return Parser submodule name\n     */\n    findLoaderForExtension(filePath) {\n        if (!filePath)\n            return;\n        const extension = getExtension(filePath).toLocaleLowerCase() || filePath;\n        return this.parsers.find(parser => parser.extensions.indexOf(extension) !== -1);\n    }\n    findLoaderForContentType(httpContentType) {\n        let mime;\n        if (!httpContentType)\n            return;\n        try {\n            mime = parseHttpContentType(httpContentType);\n        }\n        catch (_err) {\n            debug(`Invalid HTTP Content-Type header value: ${httpContentType}`);\n            return;\n        }\n        const subType = mime.subtype.indexOf('x-') === 0 ? mime.subtype.substring(2) : mime.subtype;\n        return this.parsers.find(parser => parser.mimeTypes.find(loader => loader.indexOf(`${mime.type}/${subType}`) !== -1));\n    }\n    getSupportedMimeTypes() {\n        const mimeTypeSet = new Set();\n        this.parsers.forEach(loader => {\n            loader.mimeTypes.forEach(mimeType => {\n                mimeTypeSet.add(mimeType);\n                mimeTypeSet.add(mimeType.replace('/', '/x-'));\n            });\n        });\n        return Array.from(mimeTypeSet);\n    }\n}\nfunction getExtension(fname) {\n    const i = fname.lastIndexOf('.');\n    return i === -1 ? '' : fname.slice(i);\n}\n//# sourceMappingURL=ParserFactory.js.map","export class BasicParser {\n    /**\n     * Initialize parser with output (metadata), input (tokenizer) & parsing options (options).\n     * @param {INativeMetadataCollector} metadata Output\n     * @param {ITokenizer} tokenizer Input\n     * @param {IOptions} options Parsing options\n     */\n    constructor(metadata, tokenizer, options) {\n        this.metadata = metadata;\n        this.tokenizer = tokenizer;\n        this.options = options;\n    }\n}\n//# sourceMappingURL=BasicParser.js.map","import { stringToUint8Array, uint8ArrayToString } from 'uint8array-extras';\nimport * as util from './Util.js';\nimport { InternalParserError, FieldDecodingError } from '../ParseError.js';\nconst validFourCC = /^[\\x21-\\x7e©][\\x20-\\x7e\\x00()]{3}/;\n/**\n * Token for read FourCC\n * Ref: https://en.wikipedia.org/wiki/FourCC\n */\nexport const FourCcToken = {\n    len: 4,\n    get: (buf, off) => {\n        const id = uint8ArrayToString(buf.slice(off, off + FourCcToken.len), 'latin1');\n        if (!id.match(validFourCC)) {\n            throw new FieldDecodingError(`FourCC contains invalid characters: ${util.a2hex(id)} \"${id}\"`);\n        }\n        return id;\n    },\n    put: (buffer, offset, id) => {\n        const str = stringToUint8Array(id);\n        if (str.length !== 4)\n            throw new InternalParserError('Invalid length');\n        buffer.set(str, offset);\n        return offset + 4;\n    }\n};\n//# sourceMappingURL=FourCC.js.map","import * as Token from 'token-types';\nimport { FourCcToken } from '../common/FourCC.js';\nexport const DataType = {\n    text_utf8: 0,\n    binary: 1,\n    external_info: 2,\n    reserved: 3\n};\n/**\n * APE_DESCRIPTOR: defines the sizes (and offsets) of all the pieces, as well as the MD5 checksum\n */\nexport const DescriptorParser = {\n    len: 52,\n    get: (buf, off) => {\n        return {\n            // should equal 'MAC '\n            ID: FourCcToken.get(buf, off),\n            // versionIndex number * 1000 (3.81 = 3810) (remember that 4-byte alignment causes this to take 4-bytes)\n            version: Token.UINT32_LE.get(buf, off + 4) / 1000,\n            // the number of descriptor bytes (allows later expansion of this header)\n            descriptorBytes: Token.UINT32_LE.get(buf, off + 8),\n            // the number of header APE_HEADER bytes\n            headerBytes: Token.UINT32_LE.get(buf, off + 12),\n            // the number of header APE_HEADER bytes\n            seekTableBytes: Token.UINT32_LE.get(buf, off + 16),\n            // the number of header data bytes (from original file)\n            headerDataBytes: Token.UINT32_LE.get(buf, off + 20),\n            // the number of bytes of APE frame data\n            apeFrameDataBytes: Token.UINT32_LE.get(buf, off + 24),\n            // the high order number of APE frame data bytes\n            apeFrameDataBytesHigh: Token.UINT32_LE.get(buf, off + 28),\n            // the terminating data of the file (not including tag data)\n            terminatingDataBytes: Token.UINT32_LE.get(buf, off + 32),\n            // the MD5 hash of the file (see notes for usage... it's a little tricky)\n            fileMD5: new Token.Uint8ArrayType(16).get(buf, off + 36)\n        };\n    }\n};\n/**\n * APE_HEADER: describes all of the necessary information about the APE file\n */\nexport const Header = {\n    len: 24,\n    get: (buf, off) => {\n        return {\n            // the compression level (see defines I.E. COMPRESSION_LEVEL_FAST)\n            compressionLevel: Token.UINT16_LE.get(buf, off),\n            // any format flags (for future use)\n            formatFlags: Token.UINT16_LE.get(buf, off + 2),\n            // the number of audio blocks in one frame\n            blocksPerFrame: Token.UINT32_LE.get(buf, off + 4),\n            // the number of audio blocks in the final frame\n            finalFrameBlocks: Token.UINT32_LE.get(buf, off + 8),\n            // the total number of frames\n            totalFrames: Token.UINT32_LE.get(buf, off + 12),\n            // the bits per sample (typically 16)\n            bitsPerSample: Token.UINT16_LE.get(buf, off + 16),\n            // the number of channels (1 or 2)\n            channel: Token.UINT16_LE.get(buf, off + 18),\n            // the sample rate (typically 44100)\n            sampleRate: Token.UINT32_LE.get(buf, off + 20)\n        };\n    }\n};\n/**\n * APE Tag Header/Footer Version 2.0\n * TAG: describes all the properties of the file [optional]\n */\nexport const TagFooter = {\n    len: 32,\n    get: (buf, off) => {\n        return {\n            // should equal 'APETAGEX'\n            ID: new Token.StringType(8, 'ascii').get(buf, off),\n            // equals CURRENT_APE_TAG_VERSION\n            version: Token.UINT32_LE.get(buf, off + 8),\n            // the complete size of the tag, including this footer (excludes header)\n            size: Token.UINT32_LE.get(buf, off + 12),\n            // the number of fields in the tag\n            fields: Token.UINT32_LE.get(buf, off + 16),\n            // reserved for later use (must be zero),\n            flags: parseTagFlags(Token.UINT32_LE.get(buf, off + 20))\n        };\n    }\n};\n/**\n * APE Tag v2.0 Item Header\n */\nexport const TagItemHeader = {\n    len: 8,\n    get: (buf, off) => {\n        return {\n            // Length of assigned value in bytes\n            size: Token.UINT32_LE.get(buf, off),\n            // reserved for later use (must be zero),\n            flags: parseTagFlags(Token.UINT32_LE.get(buf, off + 4))\n        };\n    }\n};\nexport function parseTagFlags(flags) {\n    return {\n        containsHeader: isBitSet(flags, 31),\n        containsFooter: isBitSet(flags, 30),\n        isHeader: isBitSet(flags, 29),\n        readOnly: isBitSet(flags, 0),\n        dataType: (flags & 6) >> 1\n    };\n}\n/**\n * @param num {number}\n * @param bit 0 is least significant bit (LSB)\n * @return {boolean} true if bit is 1; otherwise false\n */\nexport function isBitSet(num, bit) {\n    return (num & 1 << bit) !== 0;\n}\n//# sourceMappingURL=APEv2Token.js.map","import initDebug from 'debug';\nimport * as strtok3 from 'strtok3';\nimport { StringType } from 'token-types';\nimport { uint8ArrayToString } from 'uint8array-extras';\nimport * as util from '../common/Util.js';\nimport { BasicParser } from '../common/BasicParser.js';\nimport { DataType, DescriptorParser, Header, TagFooter, TagItemHeader } from './APEv2Token.js';\nimport { makeUnexpectedFileContentError } from '../ParseError.js';\nconst debug = initDebug('music-metadata:parser:APEv2');\nconst tagFormat = 'APEv2';\nconst preamble = 'APETAGEX';\nexport class ApeContentError extends makeUnexpectedFileContentError('APEv2') {\n}\nexport function tryParseApeHeader(metadata, tokenizer, options) {\n    const apeParser = new APEv2Parser(metadata, tokenizer, options);\n    return apeParser.tryParseApeHeader();\n}\nexport class APEv2Parser extends BasicParser {\n    constructor() {\n        super(...arguments);\n        this.ape = {};\n    }\n    /**\n     * Calculate the media file duration\n     * @param ah ApeHeader\n     * @return {number} duration in seconds\n     */\n    static calculateDuration(ah) {\n        let duration = ah.totalFrames > 1 ? ah.blocksPerFrame * (ah.totalFrames - 1) : 0;\n        duration += ah.finalFrameBlocks;\n        return duration / ah.sampleRate;\n    }\n    /**\n     * Calculates the APEv1 / APEv2 first field offset\n     * @param tokenizer\n     * @param offset\n     */\n    static async findApeFooterOffset(tokenizer, offset) {\n        // Search for APE footer header at the end of the file\n        const apeBuf = new Uint8Array(TagFooter.len);\n        const position = tokenizer.position;\n        if (offset <= TagFooter.len) {\n            debug(`Offset is too small to read APE footer: offset=${offset}`);\n            return undefined;\n        }\n        if (offset > TagFooter.len) {\n            await tokenizer.readBuffer(apeBuf, { position: offset - TagFooter.len });\n            tokenizer.setPosition(position);\n            const tagFooter = TagFooter.get(apeBuf, 0);\n            if (tagFooter.ID === 'APETAGEX') {\n                if (tagFooter.flags.isHeader) {\n                    debug(`APE Header found at offset=${offset - TagFooter.len}`);\n                }\n                else {\n                    debug(`APE Footer found at offset=${offset - TagFooter.len}`);\n                    offset -= tagFooter.size;\n                }\n                return { footer: tagFooter, offset };\n            }\n        }\n    }\n    static parseTagFooter(metadata, buffer, options) {\n        const footer = TagFooter.get(buffer, buffer.length - TagFooter.len);\n        if (footer.ID !== preamble)\n            throw new ApeContentError('Unexpected APEv2 Footer ID preamble value');\n        strtok3.fromBuffer(buffer);\n        const apeParser = new APEv2Parser(metadata, strtok3.fromBuffer(buffer), options);\n        return apeParser.parseTags(footer);\n    }\n    /**\n     * Parse APEv1 / APEv2 header if header signature found\n     */\n    async tryParseApeHeader() {\n        if (this.tokenizer.fileInfo.size && this.tokenizer.fileInfo.size - this.tokenizer.position < TagFooter.len) {\n            debug(\"No APEv2 header found, end-of-file reached\");\n            return;\n        }\n        const footer = await this.tokenizer.peekToken(TagFooter);\n        if (footer.ID === preamble) {\n            await this.tokenizer.ignore(TagFooter.len);\n            return this.parseTags(footer);\n        }\n        debug(`APEv2 header not found at offset=${this.tokenizer.position}`);\n        if (this.tokenizer.fileInfo.size) {\n            // Try to read the APEv2 header using just the footer-header\n            const remaining = this.tokenizer.fileInfo.size - this.tokenizer.position; // ToDo: take ID3v1 into account\n            const buffer = new Uint8Array(remaining);\n            await this.tokenizer.readBuffer(buffer);\n            return APEv2Parser.parseTagFooter(this.metadata, buffer, this.options);\n        }\n    }\n    async parse() {\n        const descriptor = await this.tokenizer.readToken(DescriptorParser);\n        if (descriptor.ID !== 'MAC ')\n            throw new ApeContentError('Unexpected descriptor ID');\n        this.ape.descriptor = descriptor;\n        const lenExp = descriptor.descriptorBytes - DescriptorParser.len;\n        const header = await (lenExp > 0 ? this.parseDescriptorExpansion(lenExp) : this.parseHeader());\n        this.metadata.setAudioOnly();\n        await this.tokenizer.ignore(header.forwardBytes);\n        return this.tryParseApeHeader();\n    }\n    async parseTags(footer) {\n        const keyBuffer = new Uint8Array(256); // maximum tag key length\n        let bytesRemaining = footer.size - TagFooter.len;\n        debug(`Parse APE tags at offset=${this.tokenizer.position}, size=${bytesRemaining}`);\n        for (let i = 0; i < footer.fields; i++) {\n            if (bytesRemaining < TagItemHeader.len) {\n                this.metadata.addWarning(`APEv2 Tag-header: ${footer.fields - i} items remaining, but no more tag data to read.`);\n                break;\n            }\n            // Only APEv2 tag has tag item headers\n            const tagItemHeader = await this.tokenizer.readToken(TagItemHeader);\n            bytesRemaining -= TagItemHeader.len + tagItemHeader.size;\n            await this.tokenizer.peekBuffer(keyBuffer, { length: Math.min(keyBuffer.length, bytesRemaining) });\n            let zero = util.findZero(keyBuffer, 0, keyBuffer.length);\n            const key = await this.tokenizer.readToken(new StringType(zero, 'ascii'));\n            await this.tokenizer.ignore(1);\n            bytesRemaining -= key.length + 1;\n            switch (tagItemHeader.flags.dataType) {\n                case DataType.text_utf8: { // utf-8 text-string\n                    const value = await this.tokenizer.readToken(new StringType(tagItemHeader.size, 'utf8'));\n                    const values = value.split(/\\x00/g);\n                    await Promise.all(values.map(val => this.metadata.addTag(tagFormat, key, val)));\n                    break;\n                }\n                case DataType.binary: // binary (probably artwork)\n                    if (this.options.skipCovers) {\n                        await this.tokenizer.ignore(tagItemHeader.size);\n                    }\n                    else {\n                        const picData = new Uint8Array(tagItemHeader.size);\n                        await this.tokenizer.readBuffer(picData);\n                        zero = util.findZero(picData, 0, picData.length);\n                        const description = uint8ArrayToString(picData.slice(0, zero));\n                        const data = picData.slice(zero + 1);\n                        await this.metadata.addTag(tagFormat, key, {\n                            description,\n                            data\n                        });\n                    }\n                    break;\n                case DataType.external_info:\n                    debug(`Ignore external info ${key}`);\n                    await this.tokenizer.ignore(tagItemHeader.size);\n                    break;\n                case DataType.reserved:\n                    debug(`Ignore external info ${key}`);\n                    this.metadata.addWarning(`APEv2 header declares a reserved datatype for \"${key}\"`);\n                    await this.tokenizer.ignore(tagItemHeader.size);\n                    break;\n            }\n        }\n    }\n    async parseDescriptorExpansion(lenExp) {\n        await this.tokenizer.ignore(lenExp);\n        return this.parseHeader();\n    }\n    async parseHeader() {\n        const header = await this.tokenizer.readToken(Header);\n        // ToDo before\n        this.metadata.setFormat('lossless', true);\n        this.metadata.setFormat('container', 'Monkey\\'s Audio');\n        this.metadata.setFormat('bitsPerSample', header.bitsPerSample);\n        this.metadata.setFormat('sampleRate', header.sampleRate);\n        this.metadata.setFormat('numberOfChannels', header.channel);\n        this.metadata.setFormat('duration', APEv2Parser.calculateDuration(header));\n        if (!this.ape.descriptor) {\n            throw new ApeContentError('Missing APE descriptor');\n        }\n        return {\n            forwardBytes: this.ape.descriptor.seekTableBytes + this.ape.descriptor.headerDataBytes +\n                this.ape.descriptor.apeFrameDataBytes + this.ape.descriptor.terminatingDataBytes\n        };\n    }\n}\n//# sourceMappingURL=APEv2Parser.js.map","import initDebug from 'debug';\nimport { StringType, UINT8 } from 'token-types';\nimport * as util from '../common/Util.js';\nimport { BasicParser } from '../common/BasicParser.js';\nimport { APEv2Parser } from '../apev2/APEv2Parser.js';\nconst debug = initDebug('music-metadata:parser:ID3v1');\n/**\n * ID3v1 Genre mappings\n * Ref: https://de.wikipedia.org/wiki/Liste_der_ID3v1-Genres\n */\nexport const Genres = [\n    'Blues', 'Classic Rock', 'Country', 'Dance', 'Disco', 'Funk', 'Grunge', 'Hip-Hop',\n    'Jazz', 'Metal', 'New Age', 'Oldies', 'Other', 'Pop', 'R&B', 'Rap', 'Reggae', 'Rock',\n    'Techno', 'Industrial', 'Alternative', 'Ska', 'Death Metal', 'Pranks', 'Soundtrack',\n    'Euro-Techno', 'Ambient', 'Trip-Hop', 'Vocal', 'Jazz+Funk', 'Fusion', 'Trance',\n    'Classical', 'Instrumental', 'Acid', 'House', 'Game', 'Sound Clip', 'Gospel', 'Noise',\n    'Alt. Rock', 'Bass', 'Soul', 'Punk', 'Space', 'Meditative', 'Instrumental Pop',\n    'Instrumental Rock', 'Ethnic', 'Gothic', 'Darkwave', 'Techno-Industrial',\n    'Electronic', 'Pop-Folk', 'Eurodance', 'Dream', 'Southern Rock', 'Comedy', 'Cult',\n    'Gangsta Rap', 'Top 40', 'Christian Rap', 'Pop/Funk', 'Jungle', 'Native American',\n    'Cabaret', 'New Wave', 'Psychedelic', 'Rave', 'Showtunes', 'Trailer', 'Lo-Fi', 'Tribal',\n    'Acid Punk', 'Acid Jazz', 'Polka', 'Retro', 'Musical', 'Rock & Roll', 'Hard Rock',\n    'Folk', 'Folk/Rock', 'National Folk', 'Swing', 'Fast-Fusion', 'Bebob', 'Latin', 'Revival',\n    'Celtic', 'Bluegrass', 'Avantgarde', 'Gothic Rock', 'Progressive Rock', 'Psychedelic Rock',\n    'Symphonic Rock', 'Slow Rock', 'Big Band', 'Chorus', 'Easy Listening', 'Acoustic', 'Humour',\n    'Speech', 'Chanson', 'Opera', 'Chamber Music', 'Sonata', 'Symphony', 'Booty Bass', 'Primus',\n    'Porn Groove', 'Satire', 'Slow Jam', 'Club', 'Tango', 'Samba', 'Folklore',\n    'Ballad', 'Power Ballad', 'Rhythmic Soul', 'Freestyle', 'Duet', 'Punk Rock', 'Drum Solo',\n    'A Cappella', 'Euro-House', 'Dance Hall', 'Goa', 'Drum & Bass', 'Club-House',\n    'Hardcore', 'Terror', 'Indie', 'BritPop', 'Negerpunk', 'Polsk Punk', 'Beat',\n    'Christian Gangsta Rap', 'Heavy Metal', 'Black Metal', 'Crossover', 'Contemporary Christian',\n    'Christian Rock', 'Merengue', 'Salsa', 'Thrash Metal', 'Anime', 'JPop', 'Synthpop',\n    'Abstract', 'Art Rock', 'Baroque', 'Bhangra', 'Big Beat', 'Breakbeat', 'Chillout',\n    'Downtempo', 'Dub', 'EBM', 'Eclectic', 'Electro', 'Electroclash', 'Emo', 'Experimental',\n    'Garage', 'Global', 'IDM', 'Illbient', 'Industro-Goth', 'Jam Band', 'Krautrock',\n    'Leftfield', 'Lounge', 'Math Rock', 'New Romantic', 'Nu-Breakz', 'Post-Punk', 'Post-Rock',\n    'Psytrance', 'Shoegaze', 'Space Rock', 'Trop Rock', 'World Music', 'Neoclassical', 'Audiobook',\n    'Audio Theatre', 'Neue Deutsche Welle', 'Podcast', 'Indie Rock', 'G-Funk', 'Dubstep',\n    'Garage Rock', 'Psybient'\n];\n/**\n * Spec: http://id3.org/ID3v1\n * Wiki: https://en.wikipedia.org/wiki/ID3\n */\nconst Iid3v1Token = {\n    len: 128,\n    /**\n     * @param buf Buffer possibly holding the 128 bytes ID3v1.1 metadata header\n     * @param off Offset in buffer in bytes\n     * @returns ID3v1.1 header if first 3 bytes equals 'TAG', otherwise null is returned\n     */\n    get: (buf, off) => {\n        const header = new Id3v1StringType(3).get(buf, off);\n        return header === 'TAG' ? {\n            header,\n            title: new Id3v1StringType(30).get(buf, off + 3),\n            artist: new Id3v1StringType(30).get(buf, off + 33),\n            album: new Id3v1StringType(30).get(buf, off + 63),\n            year: new Id3v1StringType(4).get(buf, off + 93),\n            comment: new Id3v1StringType(28).get(buf, off + 97),\n            // ID3v1.1 separator for track\n            zeroByte: UINT8.get(buf, off + 127),\n            // track: ID3v1.1 field added by Michael Mutschler\n            track: UINT8.get(buf, off + 126),\n            genre: UINT8.get(buf, off + 127)\n        } : null;\n    }\n};\nclass Id3v1StringType {\n    constructor(len) {\n        this.len = len;\n        this.stringType = new StringType(len, 'latin1');\n    }\n    get(buf, off) {\n        let value = this.stringType.get(buf, off);\n        value = util.trimRightNull(value);\n        value = value.trim();\n        return value.length > 0 ? value : undefined;\n    }\n}\nexport class ID3v1Parser extends BasicParser {\n    constructor(metadata, tokenizer, options) {\n        super(metadata, tokenizer, options);\n        this.apeHeader = options.apeHeader;\n    }\n    static getGenre(genreIndex) {\n        if (genreIndex < Genres.length) {\n            return Genres[genreIndex];\n        }\n        return undefined; // ToDO: generate warning\n    }\n    async parse() {\n        if (!this.tokenizer.fileInfo.size) {\n            debug('Skip checking for ID3v1 because the file-size is unknown');\n            return;\n        }\n        if (this.apeHeader) {\n            this.tokenizer.ignore(this.apeHeader.offset - this.tokenizer.position);\n            const apeParser = new APEv2Parser(this.metadata, this.tokenizer, this.options);\n            await apeParser.parseTags(this.apeHeader.footer);\n        }\n        const offset = this.tokenizer.fileInfo.size - Iid3v1Token.len;\n        if (this.tokenizer.position > offset) {\n            debug('Already consumed the last 128 bytes');\n            return;\n        }\n        const header = await this.tokenizer.readToken(Iid3v1Token, offset);\n        if (header) {\n            debug('ID3v1 header found at: pos=%s', this.tokenizer.fileInfo.size - Iid3v1Token.len);\n            const props = ['title', 'artist', 'album', 'comment', 'track', 'year'];\n            for (const id of props) {\n                if (header[id] && header[id] !== '')\n                    await this.addTag(id, header[id]);\n            }\n            const genre = ID3v1Parser.getGenre(header.genre);\n            if (genre)\n                await this.addTag('genre', genre);\n        }\n        else {\n            debug('ID3v1 header not found at: pos=%s', this.tokenizer.fileInfo.size - Iid3v1Token.len);\n        }\n    }\n    async addTag(id, value) {\n        await this.metadata.addTag('ID3v1', id, value);\n    }\n}\nexport async function hasID3v1Header(tokenizer) {\n    if (tokenizer.fileInfo.size >= 128) {\n        const tag = new Uint8Array(3);\n        const position = tokenizer.position;\n        await tokenizer.readBuffer(tag, { position: tokenizer.fileInfo.size - 128 });\n        tokenizer.setPosition(position); // Restore tokenizer position\n        return new TextDecoder('latin1').decode(tag) === 'TAG';\n    }\n    return false;\n}\n//# sourceMappingURL=ID3v1Parser.js.map","export const endTag2 = 'LYRICS200';\nexport async function getLyricsHeaderLength(tokenizer) {\n    const fileSize = tokenizer.fileInfo.size;\n    if (fileSize >= 143) {\n        const buf = new Uint8Array(15);\n        const position = tokenizer.position;\n        await tokenizer.readBuffer(buf, { position: fileSize - 143 });\n        tokenizer.setPosition(position); // Restore position\n        const txt = new TextDecoder('latin1').decode(buf);\n        const tag = txt.slice(6);\n        if (tag === endTag2) {\n            return Number.parseInt(txt.slice(0, 6), 10) + 15;\n        }\n    }\n    return 0;\n}\n//# sourceMappingURL=Lyrics3.js.map","/**\n * Primary entry point, Node.js specific entry point is MusepackParser.ts\n */\nimport { fromWebStream, fromBuffer } from 'strtok3';\nimport { ParserFactory } from './ParserFactory.js';\nimport { APEv2Parser } from './apev2/APEv2Parser.js';\nimport { hasID3v1Header } from './id3v1/ID3v1Parser.js';\nimport { getLyricsHeaderLength } from './lyrics3/Lyrics3.js';\nexport { LyricsContentType, TimestampFormat } from './type.js';\nexport { CouldNotDetermineFileTypeError, UnsupportedFileTypeError } from './ParseError.js';\nexport * from './ParseError.js';\n/**\n * Parse Web API File\n * Requires Blob to be able to stream using a ReadableStreamBYOBReader, only available since Node.js ≥ 20\n * @param blob - Blob to parse\n * @param options - Parsing options\n * @returns Metadata\n */\nexport async function parseBlob(blob, options = {}) {\n    const fileInfo = { mimeType: blob.type, size: blob.size };\n    if (blob instanceof File) {\n        fileInfo.path = blob.name;\n    }\n    return parseWebStream(blob.stream(), fileInfo, options);\n}\n/**\n * Parse audio from Web Stream.Readable\n * @param webStream - WebStream to read the audio track from\n * @param options - Parsing options\n * @param fileInfo - File information object or MIME-type string\n * @returns Metadata\n */\nexport async function parseWebStream(webStream, fileInfo, options = {}) {\n    const tokenizer = fromWebStream(webStream, { fileInfo: typeof fileInfo === 'string' ? { mimeType: fileInfo } : fileInfo });\n    try {\n        return await parseFromTokenizer(tokenizer, options);\n    }\n    finally {\n        await tokenizer.close();\n    }\n}\n/**\n * Parse audio from memory\n * @param uint8Array - Uint8Array holding audio data\n * @param fileInfo - File information object or MIME-type string\n * @param options - Parsing options\n * @returns Metadata\n * Ref: https://github.com/Borewit/strtok3/blob/e6938c81ff685074d5eb3064a11c0b03ca934c1d/src/index.ts#L15\n */\nexport async function parseBuffer(uint8Array, fileInfo, options = {}) {\n    const tokenizer = fromBuffer(uint8Array, { fileInfo: typeof fileInfo === 'string' ? { mimeType: fileInfo } : fileInfo });\n    return parseFromTokenizer(tokenizer, options);\n}\n/**\n * Parse audio from ITokenizer source\n * @param tokenizer - Audio source implementing the tokenizer interface\n * @param options - Parsing options\n * @returns Metadata\n */\nexport function parseFromTokenizer(tokenizer, options) {\n    const parserFactory = new ParserFactory();\n    return parserFactory.parse(tokenizer, undefined, options);\n}\n/**\n * Create a dictionary ordered by their tag id (key)\n * @param nativeTags list of tags\n * @returns tags indexed by id\n */\nexport function orderTags(nativeTags) {\n    const tags = {};\n    for (const { id, value } of nativeTags) {\n        (tags[id] || (tags[id] = [])).push(value);\n    }\n    return tags;\n}\n/**\n * Convert rating to 1-5 star rating\n * @param rating Normalized rating [0..1] (common.rating[n].rating)\n * @returns Number of stars: 1, 2, 3, 4 or 5 stars\n */\nexport function ratingToStars(rating) {\n    return rating === undefined ? 0 : 1 + Math.round(rating * 4);\n}\n/**\n * Select most likely cover image.\n * @param pictures Usually metadata.common.picture\n * @return Cover image, if any, otherwise null\n */\nexport function selectCover(pictures) {\n    return pictures ? pictures.reduce((acc, cur) => {\n        if (cur.name && cur.name.toLowerCase() in ['front', 'cover', 'cover (front)'])\n            return cur;\n        return acc;\n    }) : null;\n}\nexport async function scanAppendingHeaders(tokenizer, options = {}) {\n    let apeOffset = tokenizer.fileInfo.size;\n    if (await hasID3v1Header(tokenizer)) {\n        apeOffset -= 128;\n        const lyricsLen = await getLyricsHeaderLength(tokenizer);\n        apeOffset -= lyricsLen;\n    }\n    options.apeHeader = await APEv2Parser.findApeFooterOffset(tokenizer, apeOffset);\n}\n/**\n * Implementation only available when loaded as Node.js\n * This method will throw an Error, always.\n */\nexport async function parseFile(_filePath, _options = {}) {\n    throw new Error('This function require a Node engine. To load Web API File objects use parseBlob instead.');\n}\n/**\n * Implementation only available when loaded as Node.js\n * This method will throw an Error, always.\n */\nexport async function parseStream(_stream, _fileInfo, _options = {}) {\n    throw new Error('This function require a Node engine.');\n}\n/**\n * Return a list of supported mime-types\n */\nexport function getSupportedMimeTypes() {\n    return new ParserFactory().getSupportedMimeTypes();\n}\n//# sourceMappingURL=core.js.map","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n  var key = null;\n  void 0 !== maybeKey && (key = \"\" + maybeKey);\n  void 0 !== config.key && (key = \"\" + config.key);\n  if (\"key\" in config) {\n    maybeKey = {};\n    for (var propName in config)\n      \"key\" !== propName && (maybeKey[propName] = config[propName]);\n  } else maybeKey = config;\n  config = maybeKey.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== config ? config : null,\n    props: maybeKey\n  };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n  var index = heap.length;\n  heap.push(node);\n  a: for (; 0 < index; ) {\n    var parentIndex = (index - 1) >>> 1,\n      parent = heap[parentIndex];\n    if (0 < compare(parent, node))\n      (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n    else break a;\n  }\n}\nfunction peek(heap) {\n  return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n  if (0 === heap.length) return null;\n  var first = heap[0],\n    last = heap.pop();\n  if (last !== first) {\n    heap[0] = last;\n    a: for (\n      var index = 0, length = heap.length, halfLength = length >>> 1;\n      index < halfLength;\n\n    ) {\n      var leftIndex = 2 * (index + 1) - 1,\n        left = heap[leftIndex],\n        rightIndex = leftIndex + 1,\n        right = heap[rightIndex];\n      if (0 > compare(left, last))\n        rightIndex < length && 0 > compare(right, left)\n          ? ((heap[index] = right),\n            (heap[rightIndex] = last),\n            (index = rightIndex))\n          : ((heap[index] = left),\n            (heap[leftIndex] = last),\n            (index = leftIndex));\n      else if (rightIndex < length && 0 > compare(right, last))\n        (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n      else break a;\n    }\n  }\n  return first;\n}\nfunction compare(a, b) {\n  var diff = a.sortIndex - b.sortIndex;\n  return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n  var localPerformance = performance;\n  exports.unstable_now = function () {\n    return localPerformance.now();\n  };\n} else {\n  var localDate = Date,\n    initialTime = localDate.now();\n  exports.unstable_now = function () {\n    return localDate.now() - initialTime;\n  };\n}\nvar taskQueue = [],\n  timerQueue = [],\n  taskIdCounter = 1,\n  currentTask = null,\n  currentPriorityLevel = 3,\n  isPerformingWork = !1,\n  isHostCallbackScheduled = !1,\n  isHostTimeoutScheduled = !1,\n  needsPaint = !1,\n  localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n  localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n  localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n  for (var timer = peek(timerQueue); null !== timer; ) {\n    if (null === timer.callback) pop(timerQueue);\n    else if (timer.startTime <= currentTime)\n      pop(timerQueue),\n        (timer.sortIndex = timer.expirationTime),\n        push(taskQueue, timer);\n    else break;\n    timer = peek(timerQueue);\n  }\n}\nfunction handleTimeout(currentTime) {\n  isHostTimeoutScheduled = !1;\n  advanceTimers(currentTime);\n  if (!isHostCallbackScheduled)\n    if (null !== peek(taskQueue))\n      (isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n    else {\n      var firstTimer = peek(timerQueue);\n      null !== firstTimer &&\n        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n    }\n}\nvar isMessageLoopRunning = !1,\n  taskTimeoutID = -1,\n  frameInterval = 5,\n  startTime = -1;\nfunction shouldYieldToHost() {\n  return needsPaint\n    ? !0\n    : exports.unstable_now() - startTime < frameInterval\n      ? !1\n      : !0;\n}\nfunction performWorkUntilDeadline() {\n  needsPaint = !1;\n  if (isMessageLoopRunning) {\n    var currentTime = exports.unstable_now();\n    startTime = currentTime;\n    var hasMoreWork = !0;\n    try {\n      a: {\n        isHostCallbackScheduled = !1;\n        isHostTimeoutScheduled &&\n          ((isHostTimeoutScheduled = !1),\n          localClearTimeout(taskTimeoutID),\n          (taskTimeoutID = -1));\n        isPerformingWork = !0;\n        var previousPriorityLevel = currentPriorityLevel;\n        try {\n          b: {\n            advanceTimers(currentTime);\n            for (\n              currentTask = peek(taskQueue);\n              null !== currentTask &&\n              !(\n                currentTask.expirationTime > currentTime && shouldYieldToHost()\n              );\n\n            ) {\n              var callback = currentTask.callback;\n              if (\"function\" === typeof callback) {\n                currentTask.callback = null;\n                currentPriorityLevel = currentTask.priorityLevel;\n                var continuationCallback = callback(\n                  currentTask.expirationTime <= currentTime\n                );\n                currentTime = exports.unstable_now();\n                if (\"function\" === typeof continuationCallback) {\n                  currentTask.callback = continuationCallback;\n                  advanceTimers(currentTime);\n                  hasMoreWork = !0;\n                  break b;\n                }\n                currentTask === peek(taskQueue) && pop(taskQueue);\n                advanceTimers(currentTime);\n              } else pop(taskQueue);\n              currentTask = peek(taskQueue);\n            }\n            if (null !== currentTask) hasMoreWork = !0;\n            else {\n              var firstTimer = peek(timerQueue);\n              null !== firstTimer &&\n                requestHostTimeout(\n                  handleTimeout,\n                  firstTimer.startTime - currentTime\n                );\n              hasMoreWork = !1;\n            }\n          }\n          break a;\n        } finally {\n          (currentTask = null),\n            (currentPriorityLevel = previousPriorityLevel),\n            (isPerformingWork = !1);\n        }\n        hasMoreWork = void 0;\n      }\n    } finally {\n      hasMoreWork\n        ? schedulePerformWorkUntilDeadline()\n        : (isMessageLoopRunning = !1);\n    }\n  }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n  schedulePerformWorkUntilDeadline = function () {\n    localSetImmediate(performWorkUntilDeadline);\n  };\nelse if (\"undefined\" !== typeof MessageChannel) {\n  var channel = new MessageChannel(),\n    port = channel.port2;\n  channel.port1.onmessage = performWorkUntilDeadline;\n  schedulePerformWorkUntilDeadline = function () {\n    port.postMessage(null);\n  };\n} else\n  schedulePerformWorkUntilDeadline = function () {\n    localSetTimeout(performWorkUntilDeadline, 0);\n  };\nfunction requestHostTimeout(callback, ms) {\n  taskTimeoutID = localSetTimeout(function () {\n    callback(exports.unstable_now());\n  }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n  task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n  0 > fps || 125 < fps\n    ? console.error(\n        \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n      )\n    : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n  return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n  switch (currentPriorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n      var priorityLevel = 3;\n      break;\n    default:\n      priorityLevel = currentPriorityLevel;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_requestPaint = function () {\n  needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n  switch (priorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n    case 4:\n    case 5:\n      break;\n    default:\n      priorityLevel = 3;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_scheduleCallback = function (\n  priorityLevel,\n  callback,\n  options\n) {\n  var currentTime = exports.unstable_now();\n  \"object\" === typeof options && null !== options\n    ? ((options = options.delay),\n      (options =\n        \"number\" === typeof options && 0 < options\n          ? currentTime + options\n          : currentTime))\n    : (options = currentTime);\n  switch (priorityLevel) {\n    case 1:\n      var timeout = -1;\n      break;\n    case 2:\n      timeout = 250;\n      break;\n    case 5:\n      timeout = 1073741823;\n      break;\n    case 4:\n      timeout = 1e4;\n      break;\n    default:\n      timeout = 5e3;\n  }\n  timeout = options + timeout;\n  priorityLevel = {\n    id: taskIdCounter++,\n    callback: callback,\n    priorityLevel: priorityLevel,\n    startTime: options,\n    expirationTime: timeout,\n    sortIndex: -1\n  };\n  options > currentTime\n    ? ((priorityLevel.sortIndex = options),\n      push(timerQueue, priorityLevel),\n      null === peek(taskQueue) &&\n        priorityLevel === peek(timerQueue) &&\n        (isHostTimeoutScheduled\n          ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n          : (isHostTimeoutScheduled = !0),\n        requestHostTimeout(handleTimeout, options - currentTime)))\n    : ((priorityLevel.sortIndex = timeout),\n      push(taskQueue, priorityLevel),\n      isHostCallbackScheduled ||\n        isPerformingWork ||\n        ((isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n  return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n  var parentPriorityLevel = currentPriorityLevel;\n  return function () {\n    var previousPriorityLevel = currentPriorityLevel;\n    currentPriorityLevel = parentPriorityLevel;\n    try {\n      return callback.apply(this, arguments);\n    } finally {\n      currentPriorityLevel = previousPriorityLevel;\n    }\n  };\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n    isMounted: function () {\n      return !1;\n    },\n    enqueueForceUpdate: function () {},\n    enqueueReplaceState: function () {},\n    enqueueSetState: function () {}\n  },\n  assign = Object.assign,\n  emptyObject = {};\nfunction Component(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n  if (\n    \"object\" !== typeof partialState &&\n    \"function\" !== typeof partialState &&\n    null != partialState\n  )\n    throw Error(\n      \"takes an object of state variables to update or a function which returns an object of state variables.\"\n    );\n  this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals = { H: null, A: null, T: null, S: null, V: null },\n  hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, self, source, owner, props) {\n  self = props.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== self ? self : null,\n    props: props\n  };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  return ReactElement(\n    oldElement.type,\n    newKey,\n    void 0,\n    void 0,\n    void 0,\n    oldElement.props\n  );\n}\nfunction isValidElement(object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n}\nfunction escape(key) {\n  var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n  return (\n    \"$\" +\n    key.replace(/[=:]/g, function (match) {\n      return escaperLookup[match];\n    })\n  );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n  return \"object\" === typeof element && null !== element && null != element.key\n    ? escape(\"\" + element.key)\n    : index.toString(36);\n}\nfunction noop$1() {}\nfunction resolveThenable(thenable) {\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw thenable.reason;\n    default:\n      switch (\n        (\"string\" === typeof thenable.status\n          ? thenable.then(noop$1, noop$1)\n          : ((thenable.status = \"pending\"),\n            thenable.then(\n              function (fulfilledValue) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"fulfilled\"),\n                  (thenable.value = fulfilledValue));\n              },\n              function (error) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"rejected\"), (thenable.reason = error));\n              }\n            )),\n        thenable.status)\n      ) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw thenable.reason;\n      }\n  }\n  throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n  var type = typeof children;\n  if (\"undefined\" === type || \"boolean\" === type) children = null;\n  var invokeCallback = !1;\n  if (null === children) invokeCallback = !0;\n  else\n    switch (type) {\n      case \"bigint\":\n      case \"string\":\n      case \"number\":\n        invokeCallback = !0;\n        break;\n      case \"object\":\n        switch (children.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            invokeCallback = !0;\n            break;\n          case REACT_LAZY_TYPE:\n            return (\n              (invokeCallback = children._init),\n              mapIntoArray(\n                invokeCallback(children._payload),\n                array,\n                escapedPrefix,\n                nameSoFar,\n                callback\n              )\n            );\n        }\n    }\n  if (invokeCallback)\n    return (\n      (callback = callback(children)),\n      (invokeCallback =\n        \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n      isArrayImpl(callback)\n        ? ((escapedPrefix = \"\"),\n          null != invokeCallback &&\n            (escapedPrefix =\n              invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n          mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n            return c;\n          }))\n        : null != callback &&\n          (isValidElement(callback) &&\n            (callback = cloneAndReplaceKey(\n              callback,\n              escapedPrefix +\n                (null == callback.key ||\n                (children && children.key === callback.key)\n                  ? \"\"\n                  : (\"\" + callback.key).replace(\n                      userProvidedKeyEscapeRegex,\n                      \"$&/\"\n                    ) + \"/\") +\n                invokeCallback\n            )),\n          array.push(callback)),\n      1\n    );\n  invokeCallback = 0;\n  var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n  if (isArrayImpl(children))\n    for (var i = 0; i < children.length; i++)\n      (nameSoFar = children[i]),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n    for (\n      children = i.call(children), i = 0;\n      !(nameSoFar = children.next()).done;\n\n    )\n      (nameSoFar = nameSoFar.value),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (\"object\" === type) {\n    if (\"function\" === typeof children.then)\n      return mapIntoArray(\n        resolveThenable(children),\n        array,\n        escapedPrefix,\n        nameSoFar,\n        callback\n      );\n    array = String(children);\n    throw Error(\n      \"Objects are not valid as a React child (found: \" +\n        (\"[object Object]\" === array\n          ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n          : array) +\n        \"). If you meant to render a collection of children, use an array instead.\"\n    );\n  }\n  return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n  if (null == children) return children;\n  var result = [],\n    count = 0;\n  mapIntoArray(children, result, \"\", \"\", function (child) {\n    return func.call(context, child, count++);\n  });\n  return result;\n}\nfunction lazyInitializer(payload) {\n  if (-1 === payload._status) {\n    var ctor = payload._result;\n    ctor = ctor();\n    ctor.then(\n      function (moduleObject) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 1), (payload._result = moduleObject);\n      },\n      function (error) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 2), (payload._result = error);\n      }\n    );\n    -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n  }\n  if (1 === payload._status) return payload._result.default;\n  throw payload._result;\n}\nvar reportGlobalError =\n  \"function\" === typeof reportError\n    ? reportError\n    : function (error) {\n        if (\n          \"object\" === typeof window &&\n          \"function\" === typeof window.ErrorEvent\n        ) {\n          var event = new window.ErrorEvent(\"error\", {\n            bubbles: !0,\n            cancelable: !0,\n            message:\n              \"object\" === typeof error &&\n              null !== error &&\n              \"string\" === typeof error.message\n                ? String(error.message)\n                : String(error),\n            error: error\n          });\n          if (!window.dispatchEvent(event)) return;\n        } else if (\n          \"object\" === typeof process &&\n          \"function\" === typeof process.emit\n        ) {\n          process.emit(\"uncaughtException\", error);\n          return;\n        }\n        console.error(error);\n      };\nfunction noop() {}\nexports.Children = {\n  map: mapChildren,\n  forEach: function (children, forEachFunc, forEachContext) {\n    mapChildren(\n      children,\n      function () {\n        forEachFunc.apply(this, arguments);\n      },\n      forEachContext\n    );\n  },\n  count: function (children) {\n    var n = 0;\n    mapChildren(children, function () {\n      n++;\n    });\n    return n;\n  },\n  toArray: function (children) {\n    return (\n      mapChildren(children, function (child) {\n        return child;\n      }) || []\n    );\n  },\n  only: function (children) {\n    if (!isValidElement(children))\n      throw Error(\n        \"React.Children.only expected to receive a single React element child.\"\n      );\n    return children;\n  }\n};\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n  __proto__: null,\n  c: function (size) {\n    return ReactSharedInternals.H.useMemoCache(size);\n  }\n};\nexports.cache = function (fn) {\n  return function () {\n    return fn.apply(null, arguments);\n  };\n};\nexports.cloneElement = function (element, config, children) {\n  if (null === element || void 0 === element)\n    throw Error(\n      \"The argument must be a React element, but you passed \" + element + \".\"\n    );\n  var props = assign({}, element.props),\n    key = element.key,\n    owner = void 0;\n  if (null != config)\n    for (propName in (void 0 !== config.ref && (owner = void 0),\n    void 0 !== config.key && (key = \"\" + config.key),\n    config))\n      !hasOwnProperty.call(config, propName) ||\n        \"key\" === propName ||\n        \"__self\" === propName ||\n        \"__source\" === propName ||\n        (\"ref\" === propName && void 0 === config.ref) ||\n        (props[propName] = config[propName]);\n  var propName = arguments.length - 2;\n  if (1 === propName) props.children = children;\n  else if (1 < propName) {\n    for (var childArray = Array(propName), i = 0; i < propName; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  return ReactElement(element.type, key, void 0, void 0, owner, props);\n};\nexports.createContext = function (defaultValue) {\n  defaultValue = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    _currentValue: defaultValue,\n    _currentValue2: defaultValue,\n    _threadCount: 0,\n    Provider: null,\n    Consumer: null\n  };\n  defaultValue.Provider = defaultValue;\n  defaultValue.Consumer = {\n    $$typeof: REACT_CONSUMER_TYPE,\n    _context: defaultValue\n  };\n  return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n  var propName,\n    props = {},\n    key = null;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      hasOwnProperty.call(config, propName) &&\n        \"key\" !== propName &&\n        \"__self\" !== propName &&\n        \"__source\" !== propName &&\n        (props[propName] = config[propName]);\n  var childrenLength = arguments.length - 2;\n  if (1 === childrenLength) props.children = children;\n  else if (1 < childrenLength) {\n    for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  if (type && type.defaultProps)\n    for (propName in ((childrenLength = type.defaultProps), childrenLength))\n      void 0 === props[propName] &&\n        (props[propName] = childrenLength[propName]);\n  return ReactElement(type, key, void 0, void 0, null, props);\n};\nexports.createRef = function () {\n  return { current: null };\n};\nexports.forwardRef = function (render) {\n  return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n  return {\n    $$typeof: REACT_LAZY_TYPE,\n    _payload: { _status: -1, _result: ctor },\n    _init: lazyInitializer\n  };\n};\nexports.memo = function (type, compare) {\n  return {\n    $$typeof: REACT_MEMO_TYPE,\n    type: type,\n    compare: void 0 === compare ? null : compare\n  };\n};\nexports.startTransition = function (scope) {\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  try {\n    var returnValue = scope(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    \"object\" === typeof returnValue &&\n      null !== returnValue &&\n      \"function\" === typeof returnValue.then &&\n      returnValue.then(noop, reportGlobalError);\n  } catch (error) {\n    reportGlobalError(error);\n  } finally {\n    ReactSharedInternals.T = prevTransition;\n  }\n};\nexports.unstable_useCacheRefresh = function () {\n  return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n  return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n  return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n  return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n  return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, createDeps, update) {\n  var dispatcher = ReactSharedInternals.H;\n  if (\"function\" === typeof update)\n    throw Error(\n      \"useEffect CRUD overload is not enabled in this build of React.\"\n    );\n  return dispatcher.useEffect(create, createDeps);\n};\nexports.useId = function () {\n  return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n  return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n  return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n  return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n  return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n  return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n  return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n  return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n  return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot\n) {\n  return ReactSharedInternals.H.useSyncExternalStore(\n    subscribe,\n    getSnapshot,\n    getServerSnapshot\n  );\n};\nexports.useTransition = function () {\n  return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.1.0\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction noop() {}\nvar Internals = {\n    d: {\n      f: noop,\n      r: function () {\n        throw Error(formatProdErrorMessage(522));\n      },\n      D: noop,\n      C: noop,\n      L: noop,\n      m: noop,\n      X: noop,\n      S: noop,\n      M: noop\n    },\n    p: 0,\n    findDOMNode: null\n  },\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n  var key =\n    3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n  return {\n    $$typeof: REACT_PORTAL_TYPE,\n    key: null == key ? null : \"\" + key,\n    children: children,\n    containerInfo: containerInfo,\n    implementation: implementation\n  };\n}\nvar ReactSharedInternals =\n  React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n  if (\"font\" === as) return \"\";\n  if (\"string\" === typeof input)\n    return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  Internals;\nexports.createPortal = function (children, container) {\n  var key =\n    2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n  if (\n    !container ||\n    (1 !== container.nodeType &&\n      9 !== container.nodeType &&\n      11 !== container.nodeType)\n  )\n    throw Error(formatProdErrorMessage(299));\n  return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n  var previousTransition = ReactSharedInternals.T,\n    previousUpdatePriority = Internals.p;\n  try {\n    if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n  } finally {\n    (ReactSharedInternals.T = previousTransition),\n      (Internals.p = previousUpdatePriority),\n      Internals.d.f();\n  }\n};\nexports.preconnect = function (href, options) {\n  \"string\" === typeof href &&\n    (options\n      ? ((options = options.crossOrigin),\n        (options =\n          \"string\" === typeof options\n            ? \"use-credentials\" === options\n              ? options\n              : \"\"\n            : void 0))\n      : (options = null),\n    Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n  \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n  if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n      integrity =\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      fetchPriority =\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0;\n    \"style\" === as\n      ? Internals.d.S(\n          href,\n          \"string\" === typeof options.precedence ? options.precedence : void 0,\n          {\n            crossOrigin: crossOrigin,\n            integrity: integrity,\n            fetchPriority: fetchPriority\n          }\n        )\n      : \"script\" === as &&\n        Internals.d.X(href, {\n          crossOrigin: crossOrigin,\n          integrity: integrity,\n          fetchPriority: fetchPriority,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n  }\n};\nexports.preinitModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (\"object\" === typeof options && null !== options) {\n      if (null == options.as || \"script\" === options.as) {\n        var crossOrigin = getCrossOriginStringAs(\n          options.as,\n          options.crossOrigin\n        );\n        Internals.d.M(href, {\n          crossOrigin: crossOrigin,\n          integrity:\n            \"string\" === typeof options.integrity ? options.integrity : void 0,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n      }\n    } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n  if (\n    \"string\" === typeof href &&\n    \"object\" === typeof options &&\n    null !== options &&\n    \"string\" === typeof options.as\n  ) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n    Internals.d.L(href, as, {\n      crossOrigin: crossOrigin,\n      integrity:\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n      type: \"string\" === typeof options.type ? options.type : void 0,\n      fetchPriority:\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0,\n      referrerPolicy:\n        \"string\" === typeof options.referrerPolicy\n          ? options.referrerPolicy\n          : void 0,\n      imageSrcSet:\n        \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n      imageSizes:\n        \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n      media: \"string\" === typeof options.media ? options.media : void 0\n    });\n  }\n};\nexports.preloadModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (options) {\n      var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n      Internals.d.m(href, {\n        as:\n          \"string\" === typeof options.as && \"script\" !== options.as\n            ? options.as\n            : void 0,\n        crossOrigin: crossOrigin,\n        integrity:\n          \"string\" === typeof options.integrity ? options.integrity : void 0\n      });\n    } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n  Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n  return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n  return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.1.0\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n  React = require(\"react\"),\n  ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction isValidContainer(node) {\n  return !(\n    !node ||\n    (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n  );\n}\nfunction getNearestMountedFiber(fiber) {\n  var node = fiber,\n    nearestMounted = fiber;\n  if (fiber.alternate) for (; node.return; ) node = node.return;\n  else {\n    fiber = node;\n    do\n      (node = fiber),\n        0 !== (node.flags & 4098) && (nearestMounted = node.return),\n        (fiber = node.return);\n    while (fiber);\n  }\n  return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n  if (13 === fiber.tag) {\n    var suspenseState = fiber.memoizedState;\n    null === suspenseState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (suspenseState = fiber.memoizedState));\n    if (null !== suspenseState) return suspenseState.dehydrated;\n  }\n  return null;\n}\nfunction assertIsMounted(fiber) {\n  if (getNearestMountedFiber(fiber) !== fiber)\n    throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n  var alternate = fiber.alternate;\n  if (!alternate) {\n    alternate = getNearestMountedFiber(fiber);\n    if (null === alternate) throw Error(formatProdErrorMessage(188));\n    return alternate !== fiber ? null : fiber;\n  }\n  for (var a = fiber, b = alternate; ; ) {\n    var parentA = a.return;\n    if (null === parentA) break;\n    var parentB = parentA.alternate;\n    if (null === parentB) {\n      b = parentA.return;\n      if (null !== b) {\n        a = b;\n        continue;\n      }\n      break;\n    }\n    if (parentA.child === parentB.child) {\n      for (parentB = parentA.child; parentB; ) {\n        if (parentB === a) return assertIsMounted(parentA), fiber;\n        if (parentB === b) return assertIsMounted(parentA), alternate;\n        parentB = parentB.sibling;\n      }\n      throw Error(formatProdErrorMessage(188));\n    }\n    if (a.return !== b.return) (a = parentA), (b = parentB);\n    else {\n      for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n        if (child$0 === a) {\n          didFindChild = !0;\n          a = parentA;\n          b = parentB;\n          break;\n        }\n        if (child$0 === b) {\n          didFindChild = !0;\n          b = parentA;\n          a = parentB;\n          break;\n        }\n        child$0 = child$0.sibling;\n      }\n      if (!didFindChild) {\n        for (child$0 = parentB.child; child$0; ) {\n          if (child$0 === a) {\n            didFindChild = !0;\n            a = parentB;\n            b = parentA;\n            break;\n          }\n          if (child$0 === b) {\n            didFindChild = !0;\n            b = parentB;\n            a = parentA;\n            break;\n          }\n          child$0 = child$0.sibling;\n        }\n        if (!didFindChild) throw Error(formatProdErrorMessage(189));\n      }\n    }\n    if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n  }\n  if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n  return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n  var tag = node.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n  for (node = node.child; null !== node; ) {\n    tag = findCurrentHostFiberImpl(node);\n    if (null !== tag) return tag;\n    node = node.sibling;\n  }\n  return null;\n}\nvar assign = Object.assign,\n  REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n  REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_PROVIDER_TYPE = Symbol.for(\"react.provider\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n  if (null == type) return null;\n  if (\"function\" === typeof type)\n    return type.$$typeof === REACT_CLIENT_REFERENCE\n      ? null\n      : type.displayName || type.name || null;\n  if (\"string\" === typeof type) return type;\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return \"Fragment\";\n    case REACT_PROFILER_TYPE:\n      return \"Profiler\";\n    case REACT_STRICT_MODE_TYPE:\n      return \"StrictMode\";\n    case REACT_SUSPENSE_TYPE:\n      return \"Suspense\";\n    case REACT_SUSPENSE_LIST_TYPE:\n      return \"SuspenseList\";\n    case REACT_ACTIVITY_TYPE:\n      return \"Activity\";\n  }\n  if (\"object\" === typeof type)\n    switch (type.$$typeof) {\n      case REACT_PORTAL_TYPE:\n        return \"Portal\";\n      case REACT_CONTEXT_TYPE:\n        return (type.displayName || \"Context\") + \".Provider\";\n      case REACT_CONSUMER_TYPE:\n        return (type._context.displayName || \"Context\") + \".Consumer\";\n      case REACT_FORWARD_REF_TYPE:\n        var innerType = type.render;\n        type = type.displayName;\n        type ||\n          ((type = innerType.displayName || innerType.name || \"\"),\n          (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n        return type;\n      case REACT_MEMO_TYPE:\n        return (\n          (innerType = type.displayName || null),\n          null !== innerType\n            ? innerType\n            : getComponentNameFromType(type.type) || \"Memo\"\n        );\n      case REACT_LAZY_TYPE:\n        innerType = type._payload;\n        type = type._init;\n        try {\n          return getComponentNameFromType(type(innerType));\n        } catch (x) {}\n    }\n  return null;\n}\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals =\n    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  ReactDOMSharedInternals =\n    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  sharedNotPendingObject = {\n    pending: !1,\n    data: null,\n    method: null,\n    action: null\n  },\n  valueStack = [],\n  index = -1;\nfunction createCursor(defaultValue) {\n  return { current: defaultValue };\n}\nfunction pop(cursor) {\n  0 > index ||\n    ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n  index++;\n  valueStack[index] = cursor.current;\n  cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n  contextFiberStackCursor = createCursor(null),\n  rootInstanceStackCursor = createCursor(null),\n  hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n  push(rootInstanceStackCursor, nextRootInstance);\n  push(contextFiberStackCursor, fiber);\n  push(contextStackCursor, null);\n  switch (nextRootInstance.nodeType) {\n    case 9:\n    case 11:\n      fiber = (fiber = nextRootInstance.documentElement)\n        ? (fiber = fiber.namespaceURI)\n          ? getOwnHostContext(fiber)\n          : 0\n        : 0;\n      break;\n    default:\n      if (\n        ((fiber = nextRootInstance.tagName),\n        (nextRootInstance = nextRootInstance.namespaceURI))\n      )\n        (nextRootInstance = getOwnHostContext(nextRootInstance)),\n          (fiber = getChildHostContextProd(nextRootInstance, fiber));\n      else\n        switch (fiber) {\n          case \"svg\":\n            fiber = 1;\n            break;\n          case \"math\":\n            fiber = 2;\n            break;\n          default:\n            fiber = 0;\n        }\n  }\n  pop(contextStackCursor);\n  push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n  pop(contextStackCursor);\n  pop(contextFiberStackCursor);\n  pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n  null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n  var context = contextStackCursor.current;\n  var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n  context !== JSCompiler_inline_result &&\n    (push(contextFiberStackCursor, fiber),\n    push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n  contextFiberStackCursor.current === fiber &&\n    (pop(contextStackCursor), pop(contextFiberStackCursor));\n  hostTransitionProviderCursor.current === fiber &&\n    (pop(hostTransitionProviderCursor),\n    (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n  scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n  cancelCallback$1 = Scheduler.unstable_cancelCallback,\n  shouldYield = Scheduler.unstable_shouldYield,\n  requestPaint = Scheduler.unstable_requestPaint,\n  now = Scheduler.unstable_now,\n  getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n  ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n  UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n  NormalPriority$1 = Scheduler.unstable_NormalPriority,\n  LowPriority = Scheduler.unstable_LowPriority,\n  IdlePriority = Scheduler.unstable_IdlePriority,\n  log$1 = Scheduler.log,\n  unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n  rendererID = null,\n  injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n  \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n  if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n    try {\n      injectedHook.setStrictMode(rendererID, newIsStrictMode);\n    } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n  log = Math.log,\n  LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n  x >>>= 0;\n  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionLane = 256,\n  nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n  var pendingSyncLanes = lanes & 42;\n  if (0 !== pendingSyncLanes) return pendingSyncLanes;\n  switch (lanes & -lanes) {\n    case 1:\n      return 1;\n    case 2:\n      return 2;\n    case 4:\n      return 4;\n    case 8:\n      return 8;\n    case 16:\n      return 16;\n    case 32:\n      return 32;\n    case 64:\n      return 64;\n    case 128:\n      return 128;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return lanes & 4194048;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return lanes & 62914560;\n    case 67108864:\n      return 67108864;\n    case 134217728:\n      return 134217728;\n    case 268435456:\n      return 268435456;\n    case 536870912:\n      return 536870912;\n    case 1073741824:\n      return 0;\n    default:\n      return lanes;\n  }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n  var pendingLanes = root.pendingLanes;\n  if (0 === pendingLanes) return 0;\n  var nextLanes = 0,\n    suspendedLanes = root.suspendedLanes,\n    pingedLanes = root.pingedLanes;\n  root = root.warmLanes;\n  var nonIdlePendingLanes = pendingLanes & 134217727;\n  0 !== nonIdlePendingLanes\n    ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n      0 !== pendingLanes\n        ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n        : ((pingedLanes &= nonIdlePendingLanes),\n          0 !== pingedLanes\n            ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n            : rootHasPendingCommit ||\n              ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n              0 !== rootHasPendingCommit &&\n                (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n    : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n      0 !== nonIdlePendingLanes\n        ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n        : 0 !== pingedLanes\n          ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n          : rootHasPendingCommit ||\n            ((rootHasPendingCommit = pendingLanes & ~root),\n            0 !== rootHasPendingCommit &&\n              (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n  return 0 === nextLanes\n    ? 0\n    : 0 !== wipLanes &&\n        wipLanes !== nextLanes &&\n        0 === (wipLanes & suspendedLanes) &&\n        ((suspendedLanes = nextLanes & -nextLanes),\n        (rootHasPendingCommit = wipLanes & -wipLanes),\n        suspendedLanes >= rootHasPendingCommit ||\n          (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n      ? wipLanes\n      : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n  return (\n    0 ===\n    (root.pendingLanes &\n      ~(root.suspendedLanes & ~root.pingedLanes) &\n      renderLanes)\n  );\n}\nfunction computeExpirationTime(lane, currentTime) {\n  switch (lane) {\n    case 1:\n    case 2:\n    case 4:\n    case 8:\n    case 64:\n      return currentTime + 250;\n    case 16:\n    case 32:\n    case 128:\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return currentTime + 5e3;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return -1;\n    case 67108864:\n    case 134217728:\n    case 268435456:\n    case 536870912:\n    case 1073741824:\n      return -1;\n    default:\n      return -1;\n  }\n}\nfunction claimNextTransitionLane() {\n  var lane = nextTransitionLane;\n  nextTransitionLane <<= 1;\n  0 === (nextTransitionLane & 4194048) && (nextTransitionLane = 256);\n  return lane;\n}\nfunction claimNextRetryLane() {\n  var lane = nextRetryLane;\n  nextRetryLane <<= 1;\n  0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n  return lane;\n}\nfunction createLaneMap(initial) {\n  for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n  return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n  root.pendingLanes |= updateLane;\n  268435456 !== updateLane &&\n    ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n  root,\n  finishedLanes,\n  remainingLanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  var previouslyPendingLanes = root.pendingLanes;\n  root.pendingLanes = remainingLanes;\n  root.suspendedLanes = 0;\n  root.pingedLanes = 0;\n  root.warmLanes = 0;\n  root.expiredLanes &= remainingLanes;\n  root.entangledLanes &= remainingLanes;\n  root.errorRecoveryDisabledLanes &= remainingLanes;\n  root.shellSuspendCounter = 0;\n  var entanglements = root.entanglements,\n    expirationTimes = root.expirationTimes,\n    hiddenUpdates = root.hiddenUpdates;\n  for (\n    remainingLanes = previouslyPendingLanes & ~remainingLanes;\n    0 < remainingLanes;\n\n  ) {\n    var index$5 = 31 - clz32(remainingLanes),\n      lane = 1 << index$5;\n    entanglements[index$5] = 0;\n    expirationTimes[index$5] = -1;\n    var hiddenUpdatesForLane = hiddenUpdates[index$5];\n    if (null !== hiddenUpdatesForLane)\n      for (\n        hiddenUpdates[index$5] = null, index$5 = 0;\n        index$5 < hiddenUpdatesForLane.length;\n        index$5++\n      ) {\n        var update = hiddenUpdatesForLane[index$5];\n        null !== update && (update.lane &= -536870913);\n      }\n    remainingLanes &= ~lane;\n  }\n  0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n  0 !== suspendedRetryLanes &&\n    0 === updatedLanes &&\n    0 !== root.tag &&\n    (root.suspendedLanes |=\n      suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n  root.pendingLanes |= spawnedLane;\n  root.suspendedLanes &= ~spawnedLane;\n  var spawnedLaneIndex = 31 - clz32(spawnedLane);\n  root.entangledLanes |= spawnedLane;\n  root.entanglements[spawnedLaneIndex] =\n    root.entanglements[spawnedLaneIndex] |\n    1073741824 |\n    (entangledLanes & 4194090);\n}\nfunction markRootEntangled(root, entangledLanes) {\n  var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n  for (root = root.entanglements; rootEntangledLanes; ) {\n    var index$6 = 31 - clz32(rootEntangledLanes),\n      lane = 1 << index$6;\n    (lane & entangledLanes) | (root[index$6] & entangledLanes) &&\n      (root[index$6] |= entangledLanes);\n    rootEntangledLanes &= ~lane;\n  }\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n  switch (lane) {\n    case 2:\n      lane = 1;\n      break;\n    case 8:\n      lane = 4;\n      break;\n    case 32:\n      lane = 16;\n      break;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      lane = 128;\n      break;\n    case 268435456:\n      lane = 134217728;\n      break;\n    default:\n      lane = 0;\n  }\n  return lane;\n}\nfunction lanesToEventPriority(lanes) {\n  lanes &= -lanes;\n  return 2 < lanes\n    ? 8 < lanes\n      ? 0 !== (lanes & 134217727)\n        ? 32\n        : 268435456\n      : 8\n    : 2;\n}\nfunction resolveUpdatePriority() {\n  var updatePriority = ReactDOMSharedInternals.p;\n  if (0 !== updatePriority) return updatePriority;\n  updatePriority = window.event;\n  return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    return (ReactDOMSharedInternals.p = priority), fn();\n  } finally {\n    ReactDOMSharedInternals.p = previousPriority;\n  }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n  internalInstanceKey = \"__reactFiber$\" + randomKey,\n  internalPropsKey = \"__reactProps$\" + randomKey,\n  internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n  internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n  internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n  internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n  internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n  internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n  delete node[internalInstanceKey];\n  delete node[internalPropsKey];\n  delete node[internalEventHandlersKey];\n  delete node[internalEventHandlerListenersKey];\n  delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n  var targetInst = targetNode[internalInstanceKey];\n  if (targetInst) return targetInst;\n  for (var parentNode = targetNode.parentNode; parentNode; ) {\n    if (\n      (targetInst =\n        parentNode[internalContainerInstanceKey] ||\n        parentNode[internalInstanceKey])\n    ) {\n      parentNode = targetInst.alternate;\n      if (\n        null !== targetInst.child ||\n        (null !== parentNode && null !== parentNode.child)\n      )\n        for (\n          targetNode = getParentSuspenseInstance(targetNode);\n          null !== targetNode;\n\n        ) {\n          if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n          targetNode = getParentSuspenseInstance(targetNode);\n        }\n      return targetInst;\n    }\n    targetNode = parentNode;\n    parentNode = targetNode.parentNode;\n  }\n  return null;\n}\nfunction getInstanceFromNode(node) {\n  if (\n    (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n  ) {\n    var tag = node.tag;\n    if (\n      5 === tag ||\n      6 === tag ||\n      13 === tag ||\n      26 === tag ||\n      27 === tag ||\n      3 === tag\n    )\n      return node;\n  }\n  return null;\n}\nfunction getNodeFromInstance(inst) {\n  var tag = inst.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n  throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n  var resources = root[internalRootNodeResourcesKey];\n  resources ||\n    (resources = root[internalRootNodeResourcesKey] =\n      { hoistableStyles: new Map(), hoistableScripts: new Map() });\n  return resources;\n}\nfunction markNodeAsHoistable(node) {\n  node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n  registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n  registerDirectEvent(registrationName, dependencies);\n  registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n  registrationNameDependencies[registrationName] = dependencies;\n  for (\n    registrationName = 0;\n    registrationName < dependencies.length;\n    registrationName++\n  )\n    allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n    \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n  ),\n  illegalAttributeNameCache = {},\n  validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n    return !0;\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n    return (validatedAttributeNameCache[attributeName] = !0);\n  illegalAttributeNameCache[attributeName] = !0;\n  return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n  if (isAttributeNameSafe(name))\n    if (null === value) node.removeAttribute(name);\n    else {\n      switch (typeof value) {\n        case \"undefined\":\n        case \"function\":\n        case \"symbol\":\n          node.removeAttribute(name);\n          return;\n        case \"boolean\":\n          var prefix$8 = name.toLowerCase().slice(0, 5);\n          if (\"data-\" !== prefix$8 && \"aria-\" !== prefix$8) {\n            node.removeAttribute(name);\n            return;\n          }\n      }\n      node.setAttribute(name, \"\" + value);\n    }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttribute(name, \"\" + value);\n  }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttributeNS(namespace, name, \"\" + value);\n  }\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n  if (void 0 === prefix)\n    try {\n      throw Error();\n    } catch (x) {\n      var match = x.stack.trim().match(/\\n( *(at )?)/);\n      prefix = (match && match[1]) || \"\";\n      suffix =\n        -1 < x.stack.indexOf(\"\\n    at\")\n          ? \" (<anonymous>)\"\n          : -1 < x.stack.indexOf(\"@\")\n            ? \"@unknown:0:0\"\n            : \"\";\n    }\n  return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n  if (!fn || reentry) return \"\";\n  reentry = !0;\n  var previousPrepareStackTrace = Error.prepareStackTrace;\n  Error.prepareStackTrace = void 0;\n  try {\n    var RunInRootFrame = {\n      DetermineComponentFrameRoot: function () {\n        try {\n          if (construct) {\n            var Fake = function () {\n              throw Error();\n            };\n            Object.defineProperty(Fake.prototype, \"props\", {\n              set: function () {\n                throw Error();\n              }\n            });\n            if (\"object\" === typeof Reflect && Reflect.construct) {\n              try {\n                Reflect.construct(Fake, []);\n              } catch (x) {\n                var control = x;\n              }\n              Reflect.construct(fn, [], Fake);\n            } else {\n              try {\n                Fake.call();\n              } catch (x$9) {\n                control = x$9;\n              }\n              fn.call(Fake.prototype);\n            }\n          } else {\n            try {\n              throw Error();\n            } catch (x$10) {\n              control = x$10;\n            }\n            (Fake = fn()) &&\n              \"function\" === typeof Fake.catch &&\n              Fake.catch(function () {});\n          }\n        } catch (sample) {\n          if (sample && control && \"string\" === typeof sample.stack)\n            return [sample.stack, control.stack];\n        }\n        return [null, null];\n      }\n    };\n    RunInRootFrame.DetermineComponentFrameRoot.displayName =\n      \"DetermineComponentFrameRoot\";\n    var namePropDescriptor = Object.getOwnPropertyDescriptor(\n      RunInRootFrame.DetermineComponentFrameRoot,\n      \"name\"\n    );\n    namePropDescriptor &&\n      namePropDescriptor.configurable &&\n      Object.defineProperty(\n        RunInRootFrame.DetermineComponentFrameRoot,\n        \"name\",\n        { value: \"DetermineComponentFrameRoot\" }\n      );\n    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n      sampleStack = _RunInRootFrame$Deter[0],\n      controlStack = _RunInRootFrame$Deter[1];\n    if (sampleStack && controlStack) {\n      var sampleLines = sampleStack.split(\"\\n\"),\n        controlLines = controlStack.split(\"\\n\");\n      for (\n        namePropDescriptor = RunInRootFrame = 0;\n        RunInRootFrame < sampleLines.length &&\n        !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n      )\n        RunInRootFrame++;\n      for (\n        ;\n        namePropDescriptor < controlLines.length &&\n        !controlLines[namePropDescriptor].includes(\n          \"DetermineComponentFrameRoot\"\n        );\n\n      )\n        namePropDescriptor++;\n      if (\n        RunInRootFrame === sampleLines.length ||\n        namePropDescriptor === controlLines.length\n      )\n        for (\n          RunInRootFrame = sampleLines.length - 1,\n            namePropDescriptor = controlLines.length - 1;\n          1 <= RunInRootFrame &&\n          0 <= namePropDescriptor &&\n          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n        )\n          namePropDescriptor--;\n      for (\n        ;\n        1 <= RunInRootFrame && 0 <= namePropDescriptor;\n        RunInRootFrame--, namePropDescriptor--\n      )\n        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n            do\n              if (\n                (RunInRootFrame--,\n                namePropDescriptor--,\n                0 > namePropDescriptor ||\n                  sampleLines[RunInRootFrame] !==\n                    controlLines[namePropDescriptor])\n              ) {\n                var frame =\n                  \"\\n\" +\n                  sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n                fn.displayName &&\n                  frame.includes(\"<anonymous>\") &&\n                  (frame = frame.replace(\"<anonymous>\", fn.displayName));\n                return frame;\n              }\n            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n          }\n          break;\n        }\n    }\n  } finally {\n    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n  }\n  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n    ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n    : \"\";\n}\nfunction describeFiber(fiber) {\n  switch (fiber.tag) {\n    case 26:\n    case 27:\n    case 5:\n      return describeBuiltInComponentFrame(fiber.type);\n    case 16:\n      return describeBuiltInComponentFrame(\"Lazy\");\n    case 13:\n      return describeBuiltInComponentFrame(\"Suspense\");\n    case 19:\n      return describeBuiltInComponentFrame(\"SuspenseList\");\n    case 0:\n    case 15:\n      return describeNativeComponentFrame(fiber.type, !1);\n    case 11:\n      return describeNativeComponentFrame(fiber.type.render, !1);\n    case 1:\n      return describeNativeComponentFrame(fiber.type, !0);\n    case 31:\n      return describeBuiltInComponentFrame(\"Activity\");\n    default:\n      return \"\";\n  }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n  try {\n    var info = \"\";\n    do\n      (info += describeFiber(workInProgress)),\n        (workInProgress = workInProgress.return);\n    while (workInProgress);\n    return info;\n  } catch (x) {\n    return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n  }\n}\nfunction getToStringValue(value) {\n  switch (typeof value) {\n    case \"bigint\":\n    case \"boolean\":\n    case \"number\":\n    case \"string\":\n    case \"undefined\":\n      return value;\n    case \"object\":\n      return value;\n    default:\n      return \"\";\n  }\n}\nfunction isCheckable(elem) {\n  var type = elem.type;\n  return (\n    (elem = elem.nodeName) &&\n    \"input\" === elem.toLowerCase() &&\n    (\"checkbox\" === type || \"radio\" === type)\n  );\n}\nfunction trackValueOnNode(node) {\n  var valueField = isCheckable(node) ? \"checked\" : \"value\",\n    descriptor = Object.getOwnPropertyDescriptor(\n      node.constructor.prototype,\n      valueField\n    ),\n    currentValue = \"\" + node[valueField];\n  if (\n    !node.hasOwnProperty(valueField) &&\n    \"undefined\" !== typeof descriptor &&\n    \"function\" === typeof descriptor.get &&\n    \"function\" === typeof descriptor.set\n  ) {\n    var get = descriptor.get,\n      set = descriptor.set;\n    Object.defineProperty(node, valueField, {\n      configurable: !0,\n      get: function () {\n        return get.call(this);\n      },\n      set: function (value) {\n        currentValue = \"\" + value;\n        set.call(this, value);\n      }\n    });\n    Object.defineProperty(node, valueField, {\n      enumerable: descriptor.enumerable\n    });\n    return {\n      getValue: function () {\n        return currentValue;\n      },\n      setValue: function (value) {\n        currentValue = \"\" + value;\n      },\n      stopTracking: function () {\n        node._valueTracker = null;\n        delete node[valueField];\n      }\n    };\n  }\n}\nfunction track(node) {\n  node._valueTracker || (node._valueTracker = trackValueOnNode(node));\n}\nfunction updateValueIfChanged(node) {\n  if (!node) return !1;\n  var tracker = node._valueTracker;\n  if (!tracker) return !0;\n  var lastValue = tracker.getValue();\n  var value = \"\";\n  node &&\n    (value = isCheckable(node)\n      ? node.checked\n        ? \"true\"\n        : \"false\"\n      : node.value);\n  node = value;\n  return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n  doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n  if (\"undefined\" === typeof doc) return null;\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n  return value.replace(\n    escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n    function (ch) {\n      return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n    }\n  );\n}\nfunction updateInput(\n  element,\n  value,\n  defaultValue,\n  lastDefaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name\n) {\n  element.name = \"\";\n  null != type &&\n  \"function\" !== typeof type &&\n  \"symbol\" !== typeof type &&\n  \"boolean\" !== typeof type\n    ? (element.type = type)\n    : element.removeAttribute(\"type\");\n  if (null != value)\n    if (\"number\" === type) {\n      if ((0 === value && \"\" === element.value) || element.value != value)\n        element.value = \"\" + getToStringValue(value);\n    } else\n      element.value !== \"\" + getToStringValue(value) &&\n        (element.value = \"\" + getToStringValue(value));\n  else\n    (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n  null != value\n    ? setDefaultValue(element, type, getToStringValue(value))\n    : null != defaultValue\n      ? setDefaultValue(element, type, getToStringValue(defaultValue))\n      : null != lastDefaultValue && element.removeAttribute(\"value\");\n  null == checked &&\n    null != defaultChecked &&\n    (element.defaultChecked = !!defaultChecked);\n  null != checked &&\n    (element.checked =\n      checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n  null != name &&\n  \"function\" !== typeof name &&\n  \"symbol\" !== typeof name &&\n  \"boolean\" !== typeof name\n    ? (element.name = \"\" + getToStringValue(name))\n    : element.removeAttribute(\"name\");\n}\nfunction initInput(\n  element,\n  value,\n  defaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name,\n  isHydrating\n) {\n  null != type &&\n    \"function\" !== typeof type &&\n    \"symbol\" !== typeof type &&\n    \"boolean\" !== typeof type &&\n    (element.type = type);\n  if (null != value || null != defaultValue) {\n    if (\n      !(\n        (\"submit\" !== type && \"reset\" !== type) ||\n        (void 0 !== value && null !== value)\n      )\n    )\n      return;\n    defaultValue =\n      null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n    value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n    isHydrating || value === element.value || (element.value = value);\n    element.defaultValue = value;\n  }\n  checked = null != checked ? checked : defaultChecked;\n  checked =\n    \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n  element.checked = isHydrating ? element.checked : !!checked;\n  element.defaultChecked = !!checked;\n  null != name &&\n    \"function\" !== typeof name &&\n    \"symbol\" !== typeof name &&\n    \"boolean\" !== typeof name &&\n    (element.name = name);\n}\nfunction setDefaultValue(node, type, value) {\n  (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n    node.defaultValue === \"\" + value ||\n    (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n  node = node.options;\n  if (multiple) {\n    multiple = {};\n    for (var i = 0; i < propValue.length; i++)\n      multiple[\"$\" + propValue[i]] = !0;\n    for (propValue = 0; propValue < node.length; propValue++)\n      (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n        node[propValue].selected !== i && (node[propValue].selected = i),\n        i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n  } else {\n    propValue = \"\" + getToStringValue(propValue);\n    multiple = null;\n    for (i = 0; i < node.length; i++) {\n      if (node[i].value === propValue) {\n        node[i].selected = !0;\n        setDefaultSelected && (node[i].defaultSelected = !0);\n        return;\n      }\n      null !== multiple || node[i].disabled || (multiple = node[i]);\n    }\n    null !== multiple && (multiple.selected = !0);\n  }\n}\nfunction updateTextarea(element, value, defaultValue) {\n  if (\n    null != value &&\n    ((value = \"\" + getToStringValue(value)),\n    value !== element.value && (element.value = value),\n    null == defaultValue)\n  ) {\n    element.defaultValue !== value && (element.defaultValue = value);\n    return;\n  }\n  element.defaultValue =\n    null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n  if (null == value) {\n    if (null != children) {\n      if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n      if (isArrayImpl(children)) {\n        if (1 < children.length) throw Error(formatProdErrorMessage(93));\n        children = children[0];\n      }\n      defaultValue = children;\n    }\n    null == defaultValue && (defaultValue = \"\");\n    value = defaultValue;\n  }\n  defaultValue = getToStringValue(value);\n  element.defaultValue = defaultValue;\n  children = element.textContent;\n  children === defaultValue &&\n    \"\" !== children &&\n    null !== children &&\n    (element.value = children);\n}\nfunction setTextContent(node, text) {\n  if (text) {\n    var firstChild = node.firstChild;\n    if (\n      firstChild &&\n      firstChild === node.lastChild &&\n      3 === firstChild.nodeType\n    ) {\n      firstChild.nodeValue = text;\n      return;\n    }\n  }\n  node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n  \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n    \" \"\n  )\n);\nfunction setValueForStyle(style, styleName, value) {\n  var isCustomProperty = 0 === styleName.indexOf(\"--\");\n  null == value || \"boolean\" === typeof value || \"\" === value\n    ? isCustomProperty\n      ? style.setProperty(styleName, \"\")\n      : \"float\" === styleName\n        ? (style.cssFloat = \"\")\n        : (style[styleName] = \"\")\n    : isCustomProperty\n      ? style.setProperty(styleName, value)\n      : \"number\" !== typeof value ||\n          0 === value ||\n          unitlessNumbers.has(styleName)\n        ? \"float\" === styleName\n          ? (style.cssFloat = value)\n          : (style[styleName] = (\"\" + value).trim())\n        : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n  if (null != styles && \"object\" !== typeof styles)\n    throw Error(formatProdErrorMessage(62));\n  node = node.style;\n  if (null != prevStyles) {\n    for (var styleName in prevStyles)\n      !prevStyles.hasOwnProperty(styleName) ||\n        (null != styles && styles.hasOwnProperty(styleName)) ||\n        (0 === styleName.indexOf(\"--\")\n          ? node.setProperty(styleName, \"\")\n          : \"float\" === styleName\n            ? (node.cssFloat = \"\")\n            : (node[styleName] = \"\"));\n    for (var styleName$16 in styles)\n      (styleName = styles[styleName$16]),\n        styles.hasOwnProperty(styleName$16) &&\n          prevStyles[styleName$16] !== styleName &&\n          setValueForStyle(node, styleName$16, styleName);\n  } else\n    for (var styleName$17 in styles)\n      styles.hasOwnProperty(styleName$17) &&\n        setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n  if (-1 === tagName.indexOf(\"-\")) return !1;\n  switch (tagName) {\n    case \"annotation-xml\":\n    case \"color-profile\":\n    case \"font-face\":\n    case \"font-face-src\":\n    case \"font-face-uri\":\n    case \"font-face-format\":\n    case \"font-face-name\":\n    case \"missing-glyph\":\n      return !1;\n    default:\n      return !0;\n  }\n}\nvar aliases = new Map([\n    [\"acceptCharset\", \"accept-charset\"],\n    [\"htmlFor\", \"for\"],\n    [\"httpEquiv\", \"http-equiv\"],\n    [\"crossOrigin\", \"crossorigin\"],\n    [\"accentHeight\", \"accent-height\"],\n    [\"alignmentBaseline\", \"alignment-baseline\"],\n    [\"arabicForm\", \"arabic-form\"],\n    [\"baselineShift\", \"baseline-shift\"],\n    [\"capHeight\", \"cap-height\"],\n    [\"clipPath\", \"clip-path\"],\n    [\"clipRule\", \"clip-rule\"],\n    [\"colorInterpolation\", \"color-interpolation\"],\n    [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n    [\"colorProfile\", \"color-profile\"],\n    [\"colorRendering\", \"color-rendering\"],\n    [\"dominantBaseline\", \"dominant-baseline\"],\n    [\"enableBackground\", \"enable-background\"],\n    [\"fillOpacity\", \"fill-opacity\"],\n    [\"fillRule\", \"fill-rule\"],\n    [\"floodColor\", \"flood-color\"],\n    [\"floodOpacity\", \"flood-opacity\"],\n    [\"fontFamily\", \"font-family\"],\n    [\"fontSize\", \"font-size\"],\n    [\"fontSizeAdjust\", \"font-size-adjust\"],\n    [\"fontStretch\", \"font-stretch\"],\n    [\"fontStyle\", \"font-style\"],\n    [\"fontVariant\", \"font-variant\"],\n    [\"fontWeight\", \"font-weight\"],\n    [\"glyphName\", \"glyph-name\"],\n    [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n    [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n    [\"horizAdvX\", \"horiz-adv-x\"],\n    [\"horizOriginX\", \"horiz-origin-x\"],\n    [\"imageRendering\", \"image-rendering\"],\n    [\"letterSpacing\", \"letter-spacing\"],\n    [\"lightingColor\", \"lighting-color\"],\n    [\"markerEnd\", \"marker-end\"],\n    [\"markerMid\", \"marker-mid\"],\n    [\"markerStart\", \"marker-start\"],\n    [\"overlinePosition\", \"overline-position\"],\n    [\"overlineThickness\", \"overline-thickness\"],\n    [\"paintOrder\", \"paint-order\"],\n    [\"panose-1\", \"panose-1\"],\n    [\"pointerEvents\", \"pointer-events\"],\n    [\"renderingIntent\", \"rendering-intent\"],\n    [\"shapeRendering\", \"shape-rendering\"],\n    [\"stopColor\", \"stop-color\"],\n    [\"stopOpacity\", \"stop-opacity\"],\n    [\"strikethroughPosition\", \"strikethrough-position\"],\n    [\"strikethroughThickness\", \"strikethrough-thickness\"],\n    [\"strokeDasharray\", \"stroke-dasharray\"],\n    [\"strokeDashoffset\", \"stroke-dashoffset\"],\n    [\"strokeLinecap\", \"stroke-linecap\"],\n    [\"strokeLinejoin\", \"stroke-linejoin\"],\n    [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n    [\"strokeOpacity\", \"stroke-opacity\"],\n    [\"strokeWidth\", \"stroke-width\"],\n    [\"textAnchor\", \"text-anchor\"],\n    [\"textDecoration\", \"text-decoration\"],\n    [\"textRendering\", \"text-rendering\"],\n    [\"transformOrigin\", \"transform-origin\"],\n    [\"underlinePosition\", \"underline-position\"],\n    [\"underlineThickness\", \"underline-thickness\"],\n    [\"unicodeBidi\", \"unicode-bidi\"],\n    [\"unicodeRange\", \"unicode-range\"],\n    [\"unitsPerEm\", \"units-per-em\"],\n    [\"vAlphabetic\", \"v-alphabetic\"],\n    [\"vHanging\", \"v-hanging\"],\n    [\"vIdeographic\", \"v-ideographic\"],\n    [\"vMathematical\", \"v-mathematical\"],\n    [\"vectorEffect\", \"vector-effect\"],\n    [\"vertAdvY\", \"vert-adv-y\"],\n    [\"vertOriginX\", \"vert-origin-x\"],\n    [\"vertOriginY\", \"vert-origin-y\"],\n    [\"wordSpacing\", \"word-spacing\"],\n    [\"writingMode\", \"writing-mode\"],\n    [\"xmlnsXlink\", \"xmlns:xlink\"],\n    [\"xHeight\", \"x-height\"]\n  ]),\n  isJavaScriptProtocol =\n    /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n  return isJavaScriptProtocol.test(\"\" + url)\n    ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n    : url;\n}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n  nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n  nativeEvent.correspondingUseElement &&\n    (nativeEvent = nativeEvent.correspondingUseElement);\n  return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n  restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n  var internalInstance = getInstanceFromNode(target);\n  if (internalInstance && (target = internalInstance.stateNode)) {\n    var props = target[internalPropsKey] || null;\n    a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n      case \"input\":\n        updateInput(\n          target,\n          props.value,\n          props.defaultValue,\n          props.defaultValue,\n          props.checked,\n          props.defaultChecked,\n          props.type,\n          props.name\n        );\n        internalInstance = props.name;\n        if (\"radio\" === props.type && null != internalInstance) {\n          for (props = target; props.parentNode; ) props = props.parentNode;\n          props = props.querySelectorAll(\n            'input[name=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                \"\" + internalInstance\n              ) +\n              '\"][type=\"radio\"]'\n          );\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          ) {\n            var otherNode = props[internalInstance];\n            if (otherNode !== target && otherNode.form === target.form) {\n              var otherProps = otherNode[internalPropsKey] || null;\n              if (!otherProps) throw Error(formatProdErrorMessage(90));\n              updateInput(\n                otherNode,\n                otherProps.value,\n                otherProps.defaultValue,\n                otherProps.defaultValue,\n                otherProps.checked,\n                otherProps.defaultChecked,\n                otherProps.type,\n                otherProps.name\n              );\n            }\n          }\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          )\n            (otherNode = props[internalInstance]),\n              otherNode.form === target.form && updateValueIfChanged(otherNode);\n        }\n        break a;\n      case \"textarea\":\n        updateTextarea(target, props.value, props.defaultValue);\n        break a;\n      case \"select\":\n        (internalInstance = props.value),\n          null != internalInstance &&\n            updateOptions(target, !!props.multiple, internalInstance, !1);\n    }\n  }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n  if (isInsideEventHandler) return fn(a, b);\n  isInsideEventHandler = !0;\n  try {\n    var JSCompiler_inline_result = fn(a);\n    return JSCompiler_inline_result;\n  } finally {\n    if (\n      ((isInsideEventHandler = !1),\n      null !== restoreTarget || null !== restoreQueue)\n    )\n      if (\n        (flushSyncWork$1(),\n        restoreTarget &&\n          ((a = restoreTarget),\n          (fn = restoreQueue),\n          (restoreQueue = restoreTarget = null),\n          restoreStateOfTarget(a),\n          fn))\n      )\n        for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n  }\n}\nfunction getListener(inst, registrationName) {\n  var stateNode = inst.stateNode;\n  if (null === stateNode) return null;\n  var props = stateNode[internalPropsKey] || null;\n  if (null === props) return null;\n  stateNode = props[registrationName];\n  a: switch (registrationName) {\n    case \"onClick\":\n    case \"onClickCapture\":\n    case \"onDoubleClick\":\n    case \"onDoubleClickCapture\":\n    case \"onMouseDown\":\n    case \"onMouseDownCapture\":\n    case \"onMouseMove\":\n    case \"onMouseMoveCapture\":\n    case \"onMouseUp\":\n    case \"onMouseUpCapture\":\n    case \"onMouseEnter\":\n      (props = !props.disabled) ||\n        ((inst = inst.type),\n        (props = !(\n          \"button\" === inst ||\n          \"input\" === inst ||\n          \"select\" === inst ||\n          \"textarea\" === inst\n        )));\n      inst = !props;\n      break a;\n    default:\n      inst = !1;\n  }\n  if (inst) return null;\n  if (stateNode && \"function\" !== typeof stateNode)\n    throw Error(\n      formatProdErrorMessage(231, registrationName, typeof stateNode)\n    );\n  return stateNode;\n}\nvar canUseDOM = !(\n    \"undefined\" === typeof window ||\n    \"undefined\" === typeof window.document ||\n    \"undefined\" === typeof window.document.createElement\n  ),\n  passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n  try {\n    var options = {};\n    Object.defineProperty(options, \"passive\", {\n      get: function () {\n        passiveBrowserEventsSupported = !0;\n      }\n    });\n    window.addEventListener(\"test\", options, options);\n    window.removeEventListener(\"test\", options, options);\n  } catch (e) {\n    passiveBrowserEventsSupported = !1;\n  }\nvar root = null,\n  startText = null,\n  fallbackText = null;\nfunction getData() {\n  if (fallbackText) return fallbackText;\n  var start,\n    startValue = startText,\n    startLength = startValue.length,\n    end,\n    endValue = \"value\" in root ? root.value : root.textContent,\n    endLength = endValue.length;\n  for (\n    start = 0;\n    start < startLength && startValue[start] === endValue[start];\n    start++\n  );\n  var minEnd = startLength - start;\n  for (\n    end = 1;\n    end <= minEnd &&\n    startValue[startLength - end] === endValue[endLength - end];\n    end++\n  );\n  return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n  var keyCode = nativeEvent.keyCode;\n  \"charCode\" in nativeEvent\n    ? ((nativeEvent = nativeEvent.charCode),\n      0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n    : (nativeEvent = keyCode);\n  10 === nativeEvent && (nativeEvent = 13);\n  return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n  return !0;\n}\nfunction functionThatReturnsFalse() {\n  return !1;\n}\nfunction createSyntheticEvent(Interface) {\n  function SyntheticBaseEvent(\n    reactName,\n    reactEventType,\n    targetInst,\n    nativeEvent,\n    nativeEventTarget\n  ) {\n    this._reactName = reactName;\n    this._targetInst = targetInst;\n    this.type = reactEventType;\n    this.nativeEvent = nativeEvent;\n    this.target = nativeEventTarget;\n    this.currentTarget = null;\n    for (var propName in Interface)\n      Interface.hasOwnProperty(propName) &&\n        ((reactName = Interface[propName]),\n        (this[propName] = reactName\n          ? reactName(nativeEvent)\n          : nativeEvent[propName]));\n    this.isDefaultPrevented = (\n      null != nativeEvent.defaultPrevented\n        ? nativeEvent.defaultPrevented\n        : !1 === nativeEvent.returnValue\n    )\n      ? functionThatReturnsTrue\n      : functionThatReturnsFalse;\n    this.isPropagationStopped = functionThatReturnsFalse;\n    return this;\n  }\n  assign(SyntheticBaseEvent.prototype, {\n    preventDefault: function () {\n      this.defaultPrevented = !0;\n      var event = this.nativeEvent;\n      event &&\n        (event.preventDefault\n          ? event.preventDefault()\n          : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n        (this.isDefaultPrevented = functionThatReturnsTrue));\n    },\n    stopPropagation: function () {\n      var event = this.nativeEvent;\n      event &&\n        (event.stopPropagation\n          ? event.stopPropagation()\n          : \"unknown\" !== typeof event.cancelBubble &&\n            (event.cancelBubble = !0),\n        (this.isPropagationStopped = functionThatReturnsTrue));\n    },\n    persist: function () {},\n    isPersistent: functionThatReturnsTrue\n  });\n  return SyntheticBaseEvent;\n}\nvar EventInterface = {\n    eventPhase: 0,\n    bubbles: 0,\n    cancelable: 0,\n    timeStamp: function (event) {\n      return event.timeStamp || Date.now();\n    },\n    defaultPrevented: 0,\n    isTrusted: 0\n  },\n  SyntheticEvent = createSyntheticEvent(EventInterface),\n  UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n  SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n  lastMovementX,\n  lastMovementY,\n  lastMouseEvent,\n  MouseEventInterface = assign({}, UIEventInterface, {\n    screenX: 0,\n    screenY: 0,\n    clientX: 0,\n    clientY: 0,\n    pageX: 0,\n    pageY: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    getModifierState: getEventModifierState,\n    button: 0,\n    buttons: 0,\n    relatedTarget: function (event) {\n      return void 0 === event.relatedTarget\n        ? event.fromElement === event.srcElement\n          ? event.toElement\n          : event.fromElement\n        : event.relatedTarget;\n    },\n    movementX: function (event) {\n      if (\"movementX\" in event) return event.movementX;\n      event !== lastMouseEvent &&\n        (lastMouseEvent && \"mousemove\" === event.type\n          ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n            (lastMovementY = event.screenY - lastMouseEvent.screenY))\n          : (lastMovementY = lastMovementX = 0),\n        (lastMouseEvent = event));\n      return lastMovementX;\n    },\n    movementY: function (event) {\n      return \"movementY\" in event ? event.movementY : lastMovementY;\n    }\n  }),\n  SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n  DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n  SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n  FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n  SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n  AnimationEventInterface = assign({}, EventInterface, {\n    animationName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n  ClipboardEventInterface = assign({}, EventInterface, {\n    clipboardData: function (event) {\n      return \"clipboardData\" in event\n        ? event.clipboardData\n        : window.clipboardData;\n    }\n  }),\n  SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n  CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n  SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n  normalizeKey = {\n    Esc: \"Escape\",\n    Spacebar: \" \",\n    Left: \"ArrowLeft\",\n    Up: \"ArrowUp\",\n    Right: \"ArrowRight\",\n    Down: \"ArrowDown\",\n    Del: \"Delete\",\n    Win: \"OS\",\n    Menu: \"ContextMenu\",\n    Apps: \"ContextMenu\",\n    Scroll: \"ScrollLock\",\n    MozPrintableKey: \"Unidentified\"\n  },\n  translateToKey = {\n    8: \"Backspace\",\n    9: \"Tab\",\n    12: \"Clear\",\n    13: \"Enter\",\n    16: \"Shift\",\n    17: \"Control\",\n    18: \"Alt\",\n    19: \"Pause\",\n    20: \"CapsLock\",\n    27: \"Escape\",\n    32: \" \",\n    33: \"PageUp\",\n    34: \"PageDown\",\n    35: \"End\",\n    36: \"Home\",\n    37: \"ArrowLeft\",\n    38: \"ArrowUp\",\n    39: \"ArrowRight\",\n    40: \"ArrowDown\",\n    45: \"Insert\",\n    46: \"Delete\",\n    112: \"F1\",\n    113: \"F2\",\n    114: \"F3\",\n    115: \"F4\",\n    116: \"F5\",\n    117: \"F6\",\n    118: \"F7\",\n    119: \"F8\",\n    120: \"F9\",\n    121: \"F10\",\n    122: \"F11\",\n    123: \"F12\",\n    144: \"NumLock\",\n    145: \"ScrollLock\",\n    224: \"Meta\"\n  },\n  modifierKeyToProp = {\n    Alt: \"altKey\",\n    Control: \"ctrlKey\",\n    Meta: \"metaKey\",\n    Shift: \"shiftKey\"\n  };\nfunction modifierStateGetter(keyArg) {\n  var nativeEvent = this.nativeEvent;\n  return nativeEvent.getModifierState\n    ? nativeEvent.getModifierState(keyArg)\n    : (keyArg = modifierKeyToProp[keyArg])\n      ? !!nativeEvent[keyArg]\n      : !1;\n}\nfunction getEventModifierState() {\n  return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n    key: function (nativeEvent) {\n      if (nativeEvent.key) {\n        var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n        if (\"Unidentified\" !== key) return key;\n      }\n      return \"keypress\" === nativeEvent.type\n        ? ((nativeEvent = getEventCharCode(nativeEvent)),\n          13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n        : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n          ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n          : \"\";\n    },\n    code: 0,\n    location: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    repeat: 0,\n    locale: 0,\n    getModifierState: getEventModifierState,\n    charCode: function (event) {\n      return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n    },\n    keyCode: function (event) {\n      return \"keydown\" === event.type || \"keyup\" === event.type\n        ? event.keyCode\n        : 0;\n    },\n    which: function (event) {\n      return \"keypress\" === event.type\n        ? getEventCharCode(event)\n        : \"keydown\" === event.type || \"keyup\" === event.type\n          ? event.keyCode\n          : 0;\n    }\n  }),\n  SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n  PointerEventInterface = assign({}, MouseEventInterface, {\n    pointerId: 0,\n    width: 0,\n    height: 0,\n    pressure: 0,\n    tangentialPressure: 0,\n    tiltX: 0,\n    tiltY: 0,\n    twist: 0,\n    pointerType: 0,\n    isPrimary: 0\n  }),\n  SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n  TouchEventInterface = assign({}, UIEventInterface, {\n    touches: 0,\n    targetTouches: 0,\n    changedTouches: 0,\n    altKey: 0,\n    metaKey: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    getModifierState: getEventModifierState\n  }),\n  SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n  TransitionEventInterface = assign({}, EventInterface, {\n    propertyName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n  WheelEventInterface = assign({}, MouseEventInterface, {\n    deltaX: function (event) {\n      return \"deltaX\" in event\n        ? event.deltaX\n        : \"wheelDeltaX\" in event\n          ? -event.wheelDeltaX\n          : 0;\n    },\n    deltaY: function (event) {\n      return \"deltaY\" in event\n        ? event.deltaY\n        : \"wheelDeltaY\" in event\n          ? -event.wheelDeltaY\n          : \"wheelDelta\" in event\n            ? -event.wheelDelta\n            : 0;\n    },\n    deltaZ: 0,\n    deltaMode: 0\n  }),\n  SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n  ToggleEventInterface = assign({}, EventInterface, {\n    newState: 0,\n    oldState: 0\n  }),\n  SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n  END_KEYCODES = [9, 13, 27, 32],\n  canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n  documentMode = null;\ncanUseDOM &&\n  \"documentMode\" in document &&\n  (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n  useFallbackCompositionData =\n    canUseDOM &&\n    (!canUseCompositionEvent ||\n      (documentMode && 8 < documentMode && 11 >= documentMode)),\n  SPACEBAR_CHAR = String.fromCharCode(32),\n  hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"keyup\":\n      return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n    case \"keydown\":\n      return 229 !== nativeEvent.keyCode;\n    case \"keypress\":\n    case \"mousedown\":\n    case \"focusout\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n  nativeEvent = nativeEvent.detail;\n  return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n    ? nativeEvent.data\n    : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"compositionend\":\n      return getDataFromCustomEvent(nativeEvent);\n    case \"keypress\":\n      if (32 !== nativeEvent.which) return null;\n      hasSpaceKeypress = !0;\n      return SPACEBAR_CHAR;\n    case \"textInput\":\n      return (\n        (domEventName = nativeEvent.data),\n        domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n      );\n    default:\n      return null;\n  }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n  if (isComposing)\n    return \"compositionend\" === domEventName ||\n      (!canUseCompositionEvent &&\n        isFallbackCompositionEnd(domEventName, nativeEvent))\n      ? ((domEventName = getData()),\n        (fallbackText = startText = root = null),\n        (isComposing = !1),\n        domEventName)\n      : null;\n  switch (domEventName) {\n    case \"paste\":\n      return null;\n    case \"keypress\":\n      if (\n        !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n        (nativeEvent.ctrlKey && nativeEvent.altKey)\n      ) {\n        if (nativeEvent.char && 1 < nativeEvent.char.length)\n          return nativeEvent.char;\n        if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n      }\n      return null;\n    case \"compositionend\":\n      return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n        ? null\n        : nativeEvent.data;\n    default:\n      return null;\n  }\n}\nvar supportedInputTypes = {\n  color: !0,\n  date: !0,\n  datetime: !0,\n  \"datetime-local\": !0,\n  email: !0,\n  month: !0,\n  number: !0,\n  password: !0,\n  range: !0,\n  search: !0,\n  tel: !0,\n  text: !0,\n  time: !0,\n  url: !0,\n  week: !0\n};\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return \"input\" === nodeName\n    ? !!supportedInputTypes[elem.type]\n    : \"textarea\" === nodeName\n      ? !0\n      : !1;\n}\nfunction createAndAccumulateChangeEvent(\n  dispatchQueue,\n  inst,\n  nativeEvent,\n  target\n) {\n  restoreTarget\n    ? restoreQueue\n      ? restoreQueue.push(target)\n      : (restoreQueue = [target])\n    : (restoreTarget = target);\n  inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n  0 < inst.length &&\n    ((nativeEvent = new SyntheticEvent(\n      \"onChange\",\n      \"change\",\n      null,\n      nativeEvent,\n      target\n    )),\n    dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n  activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n  processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n  var targetNode = getNodeFromInstance(targetInst);\n  if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n  if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n  var JSCompiler_inline_result$jscomp$282;\n  if (canUseDOM) {\n    var isSupported$jscomp$inline_417 = \"oninput\" in document;\n    if (!isSupported$jscomp$inline_417) {\n      var element$jscomp$inline_418 = document.createElement(\"div\");\n      element$jscomp$inline_418.setAttribute(\"oninput\", \"return;\");\n      isSupported$jscomp$inline_417 =\n        \"function\" === typeof element$jscomp$inline_418.oninput;\n    }\n    JSCompiler_inline_result$jscomp$282 = isSupported$jscomp$inline_417;\n  } else JSCompiler_inline_result$jscomp$282 = !1;\n  isInputEventSupported =\n    JSCompiler_inline_result$jscomp$282 &&\n    (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n  activeElement$1 &&\n    (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n    (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n  if (\n    \"value\" === nativeEvent.propertyName &&\n    getInstIfValueChanged(activeElementInst$1)\n  ) {\n    var dispatchQueue = [];\n    createAndAccumulateChangeEvent(\n      dispatchQueue,\n      activeElementInst$1,\n      nativeEvent,\n      getEventTarget(nativeEvent)\n    );\n    batchedUpdates$1(runEventInBatch, dispatchQueue);\n  }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n  \"focusin\" === domEventName\n    ? (stopWatchingForValueChange(),\n      (activeElement$1 = target),\n      (activeElementInst$1 = targetInst),\n      activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n    : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n  if (\n    \"selectionchange\" === domEventName ||\n    \"keyup\" === domEventName ||\n    \"keydown\" === domEventName\n  )\n    return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n  if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n  if (\"input\" === domEventName || \"change\" === domEventName)\n    return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n  if (objectIs(objA, objB)) return !0;\n  if (\n    \"object\" !== typeof objA ||\n    null === objA ||\n    \"object\" !== typeof objB ||\n    null === objB\n  )\n    return !1;\n  var keysA = Object.keys(objA),\n    keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return !1;\n  for (keysB = 0; keysB < keysA.length; keysB++) {\n    var currentKey = keysA[keysB];\n    if (\n      !hasOwnProperty.call(objB, currentKey) ||\n      !objectIs(objA[currentKey], objB[currentKey])\n    )\n      return !1;\n  }\n  return !0;\n}\nfunction getLeafNode(node) {\n  for (; node && node.firstChild; ) node = node.firstChild;\n  return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  root = 0;\n  for (var nodeEnd; node; ) {\n    if (3 === node.nodeType) {\n      nodeEnd = root + node.textContent.length;\n      if (root <= offset && nodeEnd >= offset)\n        return { node: node, offset: offset - root };\n      root = nodeEnd;\n    }\n    a: {\n      for (; node; ) {\n        if (node.nextSibling) {\n          node = node.nextSibling;\n          break a;\n        }\n        node = node.parentNode;\n      }\n      node = void 0;\n    }\n    node = getLeafNode(node);\n  }\n}\nfunction containsNode(outerNode, innerNode) {\n  return outerNode && innerNode\n    ? outerNode === innerNode\n      ? !0\n      : outerNode && 3 === outerNode.nodeType\n        ? !1\n        : innerNode && 3 === innerNode.nodeType\n          ? containsNode(outerNode, innerNode.parentNode)\n          : \"contains\" in outerNode\n            ? outerNode.contains(innerNode)\n            : outerNode.compareDocumentPosition\n              ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n              : !1\n    : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n  containerInfo =\n    null != containerInfo &&\n    null != containerInfo.ownerDocument &&\n    null != containerInfo.ownerDocument.defaultView\n      ? containerInfo.ownerDocument.defaultView\n      : window;\n  for (\n    var element = getActiveElement(containerInfo.document);\n    element instanceof containerInfo.HTMLIFrameElement;\n\n  ) {\n    try {\n      var JSCompiler_inline_result =\n        \"string\" === typeof element.contentWindow.location.href;\n    } catch (err) {\n      JSCompiler_inline_result = !1;\n    }\n    if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n    else break;\n    element = getActiveElement(containerInfo.document);\n  }\n  return element;\n}\nfunction hasSelectionCapabilities(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return (\n    nodeName &&\n    ((\"input\" === nodeName &&\n      (\"text\" === elem.type ||\n        \"search\" === elem.type ||\n        \"tel\" === elem.type ||\n        \"url\" === elem.type ||\n        \"password\" === elem.type)) ||\n      \"textarea\" === nodeName ||\n      \"true\" === elem.contentEditable)\n  );\n}\nvar skipSelectionChangeEvent =\n    canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n  activeElement = null,\n  activeElementInst = null,\n  lastSelection = null,\n  mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n  var doc =\n    nativeEventTarget.window === nativeEventTarget\n      ? nativeEventTarget.document\n      : 9 === nativeEventTarget.nodeType\n        ? nativeEventTarget\n        : nativeEventTarget.ownerDocument;\n  mouseDown ||\n    null == activeElement ||\n    activeElement !== getActiveElement(doc) ||\n    ((doc = activeElement),\n    \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n      ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n      : ((doc = (\n          (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n          window\n        ).getSelection()),\n        (doc = {\n          anchorNode: doc.anchorNode,\n          anchorOffset: doc.anchorOffset,\n          focusNode: doc.focusNode,\n          focusOffset: doc.focusOffset\n        })),\n    (lastSelection && shallowEqual(lastSelection, doc)) ||\n      ((lastSelection = doc),\n      (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n      0 < doc.length &&\n        ((nativeEvent = new SyntheticEvent(\n          \"onSelect\",\n          \"select\",\n          null,\n          nativeEvent,\n          nativeEventTarget\n        )),\n        dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n        (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n  prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n  return prefixes;\n}\nvar vendorPrefixes = {\n    animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n    animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n    animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n    transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n    transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n    transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n    transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n  },\n  prefixedEventNames = {},\n  style = {};\ncanUseDOM &&\n  ((style = document.createElement(\"div\").style),\n  \"AnimationEvent\" in window ||\n    (delete vendorPrefixes.animationend.animation,\n    delete vendorPrefixes.animationiteration.animation,\n    delete vendorPrefixes.animationstart.animation),\n  \"TransitionEvent\" in window ||\n    delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n  if (!vendorPrefixes[eventName]) return eventName;\n  var prefixMap = vendorPrefixes[eventName],\n    styleProp;\n  for (styleProp in prefixMap)\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n      return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n  return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n  ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n  ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n  TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n  TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n  TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n  TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n  topLevelEventsToReactNames = new Map(),\n  simpleEventPluginEvents =\n    \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n      \" \"\n    );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n  topLevelEventsToReactNames.set(domEventName, reactName);\n  registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n  if (\"object\" === typeof value && null !== value) {\n    var existing = CapturedStacks.get(value);\n    if (void 0 !== existing) return existing;\n    source = {\n      value: value,\n      source: source,\n      stack: getStackByFiberInDevAndProd(source)\n    };\n    CapturedStacks.set(value, source);\n    return source;\n  }\n  return {\n    value: value,\n    source: source,\n    stack: getStackByFiberInDevAndProd(source)\n  };\n}\nvar concurrentQueues = [],\n  concurrentQueuesIndex = 0,\n  concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n  for (\n    var endIndex = concurrentQueuesIndex,\n      i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n    i < endIndex;\n\n  ) {\n    var fiber = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var queue = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var update = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var lane = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    if (null !== queue && null !== update) {\n      var pending = queue.pending;\n      null === pending\n        ? (update.next = update)\n        : ((update.next = pending.next), (pending.next = update));\n      queue.pending = update;\n    }\n    0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n  }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n  concurrentQueues[concurrentQueuesIndex++] = fiber;\n  concurrentQueues[concurrentQueuesIndex++] = queue;\n  concurrentQueues[concurrentQueuesIndex++] = update;\n  concurrentQueues[concurrentQueuesIndex++] = lane;\n  concurrentlyUpdatedLanes |= lane;\n  fiber.lanes |= lane;\n  fiber = fiber.alternate;\n  null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n  enqueueUpdate$1(fiber, queue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n  enqueueUpdate$1(fiber, null, null, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n  sourceFiber.lanes |= lane;\n  var alternate = sourceFiber.alternate;\n  null !== alternate && (alternate.lanes |= lane);\n  for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n    (parent.childLanes |= lane),\n      (alternate = parent.alternate),\n      null !== alternate && (alternate.childLanes |= lane),\n      22 === parent.tag &&\n        ((sourceFiber = parent.stateNode),\n        null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n      (sourceFiber = parent),\n      (parent = parent.return);\n  return 3 === sourceFiber.tag\n    ? ((parent = sourceFiber.stateNode),\n      isHidden &&\n        null !== update &&\n        ((isHidden = 31 - clz32(lane)),\n        (sourceFiber = parent.hiddenUpdates),\n        (alternate = sourceFiber[isHidden]),\n        null === alternate\n          ? (sourceFiber[isHidden] = [update])\n          : alternate.push(update),\n        (update.lane = lane | 536870912)),\n      parent)\n    : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n  if (50 < nestedUpdateCount)\n    throw (\n      ((nestedUpdateCount = 0),\n      (rootWithNestedUpdates = null),\n      Error(formatProdErrorMessage(185)))\n    );\n  for (var parent = sourceFiber.return; null !== parent; )\n    (sourceFiber = parent), (parent = sourceFiber.return);\n  return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n  this.tag = tag;\n  this.key = key;\n  this.sibling =\n    this.child =\n    this.return =\n    this.stateNode =\n    this.type =\n    this.elementType =\n      null;\n  this.index = 0;\n  this.refCleanup = this.ref = null;\n  this.pendingProps = pendingProps;\n  this.dependencies =\n    this.memoizedState =\n    this.updateQueue =\n    this.memoizedProps =\n      null;\n  this.mode = mode;\n  this.subtreeFlags = this.flags = 0;\n  this.deletions = null;\n  this.childLanes = this.lanes = 0;\n  this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n  return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n  Component = Component.prototype;\n  return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n  var workInProgress = current.alternate;\n  null === workInProgress\n    ? ((workInProgress = createFiberImplClass(\n        current.tag,\n        pendingProps,\n        current.key,\n        current.mode\n      )),\n      (workInProgress.elementType = current.elementType),\n      (workInProgress.type = current.type),\n      (workInProgress.stateNode = current.stateNode),\n      (workInProgress.alternate = current),\n      (current.alternate = workInProgress))\n    : ((workInProgress.pendingProps = pendingProps),\n      (workInProgress.type = current.type),\n      (workInProgress.flags = 0),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null));\n  workInProgress.flags = current.flags & 65011712;\n  workInProgress.childLanes = current.childLanes;\n  workInProgress.lanes = current.lanes;\n  workInProgress.child = current.child;\n  workInProgress.memoizedProps = current.memoizedProps;\n  workInProgress.memoizedState = current.memoizedState;\n  workInProgress.updateQueue = current.updateQueue;\n  pendingProps = current.dependencies;\n  workInProgress.dependencies =\n    null === pendingProps\n      ? null\n      : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n  workInProgress.sibling = current.sibling;\n  workInProgress.index = current.index;\n  workInProgress.ref = current.ref;\n  workInProgress.refCleanup = current.refCleanup;\n  return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n  workInProgress.flags &= 65011714;\n  var current = workInProgress.alternate;\n  null === current\n    ? ((workInProgress.childLanes = 0),\n      (workInProgress.lanes = renderLanes),\n      (workInProgress.child = null),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.memoizedProps = null),\n      (workInProgress.memoizedState = null),\n      (workInProgress.updateQueue = null),\n      (workInProgress.dependencies = null),\n      (workInProgress.stateNode = null))\n    : ((workInProgress.childLanes = current.childLanes),\n      (workInProgress.lanes = current.lanes),\n      (workInProgress.child = current.child),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null),\n      (workInProgress.memoizedProps = current.memoizedProps),\n      (workInProgress.memoizedState = current.memoizedState),\n      (workInProgress.updateQueue = current.updateQueue),\n      (workInProgress.type = current.type),\n      (renderLanes = current.dependencies),\n      (workInProgress.dependencies =\n        null === renderLanes\n          ? null\n          : {\n              lanes: renderLanes.lanes,\n              firstContext: renderLanes.firstContext\n            }));\n  return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n  type,\n  key,\n  pendingProps,\n  owner,\n  mode,\n  lanes\n) {\n  var fiberTag = 0;\n  owner = type;\n  if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n  else if (\"string\" === typeof type)\n    fiberTag = isHostHoistableType(\n      type,\n      pendingProps,\n      contextStackCursor.current\n    )\n      ? 26\n      : \"html\" === type || \"head\" === type || \"body\" === type\n        ? 27\n        : 5;\n  else\n    a: switch (type) {\n      case REACT_ACTIVITY_TYPE:\n        return (\n          (type = createFiberImplClass(31, pendingProps, key, mode)),\n          (type.elementType = REACT_ACTIVITY_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_FRAGMENT_TYPE:\n        return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n      case REACT_STRICT_MODE_TYPE:\n        fiberTag = 8;\n        mode |= 24;\n        break;\n      case REACT_PROFILER_TYPE:\n        return (\n          (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n          (type.elementType = REACT_PROFILER_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_TYPE:\n        return (\n          (type = createFiberImplClass(13, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_LIST_TYPE:\n        return (\n          (type = createFiberImplClass(19, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      default:\n        if (\"object\" === typeof type && null !== type)\n          switch (type.$$typeof) {\n            case REACT_PROVIDER_TYPE:\n            case REACT_CONTEXT_TYPE:\n              fiberTag = 10;\n              break a;\n            case REACT_CONSUMER_TYPE:\n              fiberTag = 9;\n              break a;\n            case REACT_FORWARD_REF_TYPE:\n              fiberTag = 11;\n              break a;\n            case REACT_MEMO_TYPE:\n              fiberTag = 14;\n              break a;\n            case REACT_LAZY_TYPE:\n              fiberTag = 16;\n              owner = null;\n              break a;\n          }\n        fiberTag = 29;\n        pendingProps = Error(\n          formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n        );\n        owner = null;\n    }\n  key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n  key.elementType = type;\n  key.type = owner;\n  key.lanes = lanes;\n  return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n  elements = createFiberImplClass(7, elements, key, mode);\n  elements.lanes = lanes;\n  return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n  content = createFiberImplClass(6, content, null, mode);\n  content.lanes = lanes;\n  return content;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n  mode = createFiberImplClass(\n    4,\n    null !== portal.children ? portal.children : [],\n    portal.key,\n    mode\n  );\n  mode.lanes = lanes;\n  mode.stateNode = {\n    containerInfo: portal.containerInfo,\n    pendingChildren: null,\n    implementation: portal.implementation\n  };\n  return mode;\n}\nvar forkStack = [],\n  forkStackIndex = 0,\n  treeForkProvider = null,\n  treeForkCount = 0,\n  idStack = [],\n  idStackIndex = 0,\n  treeContextProvider = null,\n  treeContextId = 1,\n  treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n  forkStack[forkStackIndex++] = treeForkCount;\n  forkStack[forkStackIndex++] = treeForkProvider;\n  treeForkProvider = workInProgress;\n  treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextProvider = workInProgress;\n  var baseIdWithLeadingBit = treeContextId;\n  workInProgress = treeContextOverflow;\n  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n  baseIdWithLeadingBit &= ~(1 << baseLength);\n  index += 1;\n  var length = 32 - clz32(totalChildren) + baseLength;\n  if (30 < length) {\n    var numberOfOverflowBits = baseLength - (baseLength % 5);\n    length = (\n      baseIdWithLeadingBit &\n      ((1 << numberOfOverflowBits) - 1)\n    ).toString(32);\n    baseIdWithLeadingBit >>= numberOfOverflowBits;\n    baseLength -= numberOfOverflowBits;\n    treeContextId =\n      (1 << (32 - clz32(totalChildren) + baseLength)) |\n      (index << baseLength) |\n      baseIdWithLeadingBit;\n    treeContextOverflow = length + workInProgress;\n  } else\n    (treeContextId =\n      (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n      (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n  null !== workInProgress.return &&\n    (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n  for (; workInProgress === treeForkProvider; )\n    (treeForkProvider = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null),\n      (treeForkCount = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null);\n  for (; workInProgress === treeContextProvider; )\n    (treeContextProvider = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextOverflow = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextId = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null);\n}\nvar hydrationParentFiber = null,\n  nextHydratableInstance = null,\n  isHydrating = !1,\n  hydrationErrors = null,\n  rootOrSingletonContext = !1,\n  HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n  var error = Error(formatProdErrorMessage(418, \"\"));\n  queueHydrationError(createCapturedValueAtFiber(error, fiber));\n  throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n  var instance = fiber.stateNode,\n    type = fiber.type,\n    props = fiber.memoizedProps;\n  instance[internalInstanceKey] = fiber;\n  instance[internalPropsKey] = props;\n  switch (type) {\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"cancel\", instance);\n      listenToNonDelegatedEvent(\"close\", instance);\n      break;\n    case \"iframe\":\n    case \"object\":\n    case \"embed\":\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (type = 0; type < mediaEventTypes.length; type++)\n        listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n      break;\n    case \"source\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      break;\n    case \"img\":\n    case \"image\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", instance);\n      break;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      initInput(\n        instance,\n        props.value,\n        props.defaultValue,\n        props.checked,\n        props.defaultChecked,\n        props.type,\n        props.name,\n        !0\n      );\n      track(instance);\n      break;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      break;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", instance),\n        initTextarea(instance, props.value, props.defaultValue, props.children),\n        track(instance);\n  }\n  type = props.children;\n  (\"string\" !== typeof type &&\n    \"number\" !== typeof type &&\n    \"bigint\" !== typeof type) ||\n  instance.textContent === \"\" + type ||\n  !0 === props.suppressHydrationWarning ||\n  checkForUnmatchedText(instance.textContent, type)\n    ? (null != props.popover &&\n        (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n        listenToNonDelegatedEvent(\"toggle\", instance)),\n      null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n      null != props.onScrollEnd &&\n        listenToNonDelegatedEvent(\"scrollend\", instance),\n      null != props.onClick && (instance.onclick = noop$1),\n      (instance = !0))\n    : (instance = !1);\n  instance || throwOnHydrationMismatch(fiber);\n}\nfunction popToNextHostParent(fiber) {\n  for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n    switch (hydrationParentFiber.tag) {\n      case 5:\n      case 13:\n        rootOrSingletonContext = !1;\n        return;\n      case 27:\n      case 3:\n        rootOrSingletonContext = !0;\n        return;\n      default:\n        hydrationParentFiber = hydrationParentFiber.return;\n    }\n}\nfunction popHydrationState(fiber) {\n  if (fiber !== hydrationParentFiber) return !1;\n  if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n  var tag = fiber.tag,\n    JSCompiler_temp;\n  if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n    if ((JSCompiler_temp = 5 === tag))\n      (JSCompiler_temp = fiber.type),\n        (JSCompiler_temp =\n          !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n          shouldSetTextContent(fiber.type, fiber.memoizedProps));\n    JSCompiler_temp = !JSCompiler_temp;\n  }\n  JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n  popToNextHostParent(fiber);\n  if (13 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    a: {\n      fiber = fiber.nextSibling;\n      for (tag = 0; fiber; ) {\n        if (8 === fiber.nodeType)\n          if (((JSCompiler_temp = fiber.data), \"/$\" === JSCompiler_temp)) {\n            if (0 === tag) {\n              nextHydratableInstance = getNextHydratable(fiber.nextSibling);\n              break a;\n            }\n            tag--;\n          } else\n            (\"$\" !== JSCompiler_temp &&\n              \"$!\" !== JSCompiler_temp &&\n              \"$?\" !== JSCompiler_temp) ||\n              tag++;\n        fiber = fiber.nextSibling;\n      }\n      nextHydratableInstance = null;\n    }\n  } else\n    27 === tag\n      ? ((tag = nextHydratableInstance),\n        isSingletonScope(fiber.type)\n          ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n            (previousHydratableOnEnteringScopedSingleton = null),\n            (nextHydratableInstance = fiber))\n          : (nextHydratableInstance = tag))\n      : (nextHydratableInstance = hydrationParentFiber\n          ? getNextHydratable(fiber.stateNode.nextSibling)\n          : null);\n  return !0;\n}\nfunction resetHydrationState() {\n  nextHydratableInstance = hydrationParentFiber = null;\n  isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n  var queuedErrors = hydrationErrors;\n  null !== queuedErrors &&\n    (null === workInProgressRootRecoverableErrors\n      ? (workInProgressRootRecoverableErrors = queuedErrors)\n      : workInProgressRootRecoverableErrors.push.apply(\n          workInProgressRootRecoverableErrors,\n          queuedErrors\n        ),\n    (hydrationErrors = null));\n  return queuedErrors;\n}\nfunction queueHydrationError(error) {\n  null === hydrationErrors\n    ? (hydrationErrors = [error])\n    : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n  currentlyRenderingFiber$1 = null,\n  lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n  push(valueCursor, context._currentValue);\n  context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n  context._currentValue = valueCursor.current;\n  pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n  for (; null !== parent; ) {\n    var alternate = parent.alternate;\n    (parent.childLanes & renderLanes) !== renderLanes\n      ? ((parent.childLanes |= renderLanes),\n        null !== alternate && (alternate.childLanes |= renderLanes))\n      : null !== alternate &&\n        (alternate.childLanes & renderLanes) !== renderLanes &&\n        (alternate.childLanes |= renderLanes);\n    if (parent === propagationRoot) break;\n    parent = parent.return;\n  }\n}\nfunction propagateContextChanges(\n  workInProgress,\n  contexts,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  var fiber = workInProgress.child;\n  null !== fiber && (fiber.return = workInProgress);\n  for (; null !== fiber; ) {\n    var list = fiber.dependencies;\n    if (null !== list) {\n      var nextFiber = fiber.child;\n      list = list.firstContext;\n      a: for (; null !== list; ) {\n        var dependency = list;\n        list = fiber;\n        for (var i = 0; i < contexts.length; i++)\n          if (dependency.context === contexts[i]) {\n            list.lanes |= renderLanes;\n            dependency = list.alternate;\n            null !== dependency && (dependency.lanes |= renderLanes);\n            scheduleContextWorkOnParentPath(\n              list.return,\n              renderLanes,\n              workInProgress\n            );\n            forcePropagateEntireTree || (nextFiber = null);\n            break a;\n          }\n        list = dependency.next;\n      }\n    } else if (18 === fiber.tag) {\n      nextFiber = fiber.return;\n      if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n      nextFiber.lanes |= renderLanes;\n      list = nextFiber.alternate;\n      null !== list && (list.lanes |= renderLanes);\n      scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n      nextFiber = null;\n    } else nextFiber = fiber.child;\n    if (null !== nextFiber) nextFiber.return = fiber;\n    else\n      for (nextFiber = fiber; null !== nextFiber; ) {\n        if (nextFiber === workInProgress) {\n          nextFiber = null;\n          break;\n        }\n        fiber = nextFiber.sibling;\n        if (null !== fiber) {\n          fiber.return = nextFiber.return;\n          nextFiber = fiber;\n          break;\n        }\n        nextFiber = nextFiber.return;\n      }\n    fiber = nextFiber;\n  }\n}\nfunction propagateParentContextChanges(\n  current,\n  workInProgress,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  current = null;\n  for (\n    var parent = workInProgress, isInsidePropagationBailout = !1;\n    null !== parent;\n\n  ) {\n    if (!isInsidePropagationBailout)\n      if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n      else if (0 !== (parent.flags & 262144)) break;\n    if (10 === parent.tag) {\n      var currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent = currentParent.memoizedProps;\n      if (null !== currentParent) {\n        var context = parent.type;\n        objectIs(parent.pendingProps.value, currentParent.value) ||\n          (null !== current ? current.push(context) : (current = [context]));\n      }\n    } else if (parent === hostTransitionProviderCursor.current) {\n      currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent.memoizedState.memoizedState !==\n        parent.memoizedState.memoizedState &&\n        (null !== current\n          ? current.push(HostTransitionContext)\n          : (current = [HostTransitionContext]));\n    }\n    parent = parent.return;\n  }\n  null !== current &&\n    propagateContextChanges(\n      workInProgress,\n      current,\n      renderLanes,\n      forcePropagateEntireTree\n    );\n  workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n  for (\n    currentDependencies = currentDependencies.firstContext;\n    null !== currentDependencies;\n\n  ) {\n    if (\n      !objectIs(\n        currentDependencies.context._currentValue,\n        currentDependencies.memoizedValue\n      )\n    )\n      return !0;\n    currentDependencies = currentDependencies.next;\n  }\n  return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n  currentlyRenderingFiber$1 = workInProgress;\n  lastContextDependency = null;\n  workInProgress = workInProgress.dependencies;\n  null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n  return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n  null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n  return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n  var value = context._currentValue;\n  context = { context: context, memoizedValue: value, next: null };\n  if (null === lastContextDependency) {\n    if (null === consumer) throw Error(formatProdErrorMessage(308));\n    lastContextDependency = context;\n    consumer.dependencies = { lanes: 0, firstContext: context };\n    consumer.flags |= 524288;\n  } else lastContextDependency = lastContextDependency.next = context;\n  return value;\n}\nvar AbortControllerLocal =\n    \"undefined\" !== typeof AbortController\n      ? AbortController\n      : function () {\n          var listeners = [],\n            signal = (this.signal = {\n              aborted: !1,\n              addEventListener: function (type, listener) {\n                listeners.push(listener);\n              }\n            });\n          this.abort = function () {\n            signal.aborted = !0;\n            listeners.forEach(function (listener) {\n              return listener();\n            });\n          };\n        },\n  scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n  NormalPriority = Scheduler.unstable_NormalPriority,\n  CacheContext = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    Consumer: null,\n    Provider: null,\n    _currentValue: null,\n    _currentValue2: null,\n    _threadCount: 0\n  };\nfunction createCache() {\n  return {\n    controller: new AbortControllerLocal(),\n    data: new Map(),\n    refCount: 0\n  };\n}\nfunction releaseCache(cache) {\n  cache.refCount--;\n  0 === cache.refCount &&\n    scheduleCallback$2(NormalPriority, function () {\n      cache.controller.abort();\n    });\n}\nvar currentEntangledListeners = null,\n  currentEntangledPendingCount = 0,\n  currentEntangledLane = 0,\n  currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n  if (null === currentEntangledListeners) {\n    var entangledListeners = (currentEntangledListeners = []);\n    currentEntangledPendingCount = 0;\n    currentEntangledLane = requestTransitionLane();\n    currentEntangledActionThenable = {\n      status: \"pending\",\n      value: void 0,\n      then: function (resolve) {\n        entangledListeners.push(resolve);\n      }\n    };\n  }\n  currentEntangledPendingCount++;\n  thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n  return thenable;\n}\nfunction pingEngtangledActionScope() {\n  if (\n    0 === --currentEntangledPendingCount &&\n    null !== currentEntangledListeners\n  ) {\n    null !== currentEntangledActionThenable &&\n      (currentEntangledActionThenable.status = \"fulfilled\");\n    var listeners = currentEntangledListeners;\n    currentEntangledListeners = null;\n    currentEntangledLane = 0;\n    currentEntangledActionThenable = null;\n    for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n  }\n}\nfunction chainThenableValue(thenable, result) {\n  var listeners = [],\n    thenableWithOverride = {\n      status: \"pending\",\n      value: null,\n      reason: null,\n      then: function (resolve) {\n        listeners.push(resolve);\n      }\n    };\n  thenable.then(\n    function () {\n      thenableWithOverride.status = \"fulfilled\";\n      thenableWithOverride.value = result;\n      for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n    },\n    function (error) {\n      thenableWithOverride.status = \"rejected\";\n      thenableWithOverride.reason = error;\n      for (error = 0; error < listeners.length; error++)\n        (0, listeners[error])(void 0);\n    }\n  );\n  return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n  \"object\" === typeof returnValue &&\n    null !== returnValue &&\n    \"function\" === typeof returnValue.then &&\n    entangleAsyncAction(transition, returnValue);\n  null !== prevOnStartTransitionFinish &&\n    prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n  var cacheResumedFromPreviousRender = resumedCache.current;\n  return null !== cacheResumedFromPreviousRender\n    ? cacheResumedFromPreviousRender\n    : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n  null === prevCachePool\n    ? push(resumedCache, resumedCache.current)\n    : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n  var cacheFromPool = peekCacheFromPool();\n  return null === cacheFromPool\n    ? null\n    : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n  SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n  SuspenseActionException = Error(formatProdErrorMessage(542)),\n  noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n  thenable = thenable.status;\n  return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction noop$3() {}\nfunction trackUsedThenable(thenableState, thenable, index) {\n  index = thenableState[index];\n  void 0 === index\n    ? thenableState.push(thenable)\n    : index !== thenable && (thenable.then(noop$3, noop$3), (thenable = index));\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw (\n        ((thenableState = thenable.reason),\n        checkIfUseWrappedInAsyncCatch(thenableState),\n        thenableState)\n      );\n    default:\n      if (\"string\" === typeof thenable.status) thenable.then(noop$3, noop$3);\n      else {\n        thenableState = workInProgressRoot;\n        if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n          throw Error(formatProdErrorMessage(482));\n        thenableState = thenable;\n        thenableState.status = \"pending\";\n        thenableState.then(\n          function (fulfilledValue) {\n            if (\"pending\" === thenable.status) {\n              var fulfilledThenable = thenable;\n              fulfilledThenable.status = \"fulfilled\";\n              fulfilledThenable.value = fulfilledValue;\n            }\n          },\n          function (error) {\n            if (\"pending\" === thenable.status) {\n              var rejectedThenable = thenable;\n              rejectedThenable.status = \"rejected\";\n              rejectedThenable.reason = error;\n            }\n          }\n        );\n      }\n      switch (thenable.status) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw (\n            ((thenableState = thenable.reason),\n            checkIfUseWrappedInAsyncCatch(thenableState),\n            thenableState)\n          );\n      }\n      suspendedThenable = thenable;\n      throw SuspenseException;\n  }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n  if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n  var thenable = suspendedThenable;\n  suspendedThenable = null;\n  return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n  if (\n    rejectedReason === SuspenseException ||\n    rejectedReason === SuspenseActionException\n  )\n    throw Error(formatProdErrorMessage(483));\n}\nvar hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n  fiber.updateQueue = {\n    baseState: fiber.memoizedState,\n    firstBaseUpdate: null,\n    lastBaseUpdate: null,\n    shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n    callbacks: null\n  };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n  current = current.updateQueue;\n  workInProgress.updateQueue === current &&\n    (workInProgress.updateQueue = {\n      baseState: current.baseState,\n      firstBaseUpdate: current.firstBaseUpdate,\n      lastBaseUpdate: current.lastBaseUpdate,\n      shared: current.shared,\n      callbacks: null\n    });\n}\nfunction createUpdate(lane) {\n  return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n  var updateQueue = fiber.updateQueue;\n  if (null === updateQueue) return null;\n  updateQueue = updateQueue.shared;\n  if (0 !== (executionContext & 2)) {\n    var pending = updateQueue.pending;\n    null === pending\n      ? (update.next = update)\n      : ((update.next = pending.next), (pending.next = update));\n    updateQueue.pending = update;\n    update = getRootForUpdatedFiber(fiber);\n    markUpdateLaneFromFiberToRoot(fiber, null, lane);\n    return update;\n  }\n  enqueueUpdate$1(fiber, updateQueue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n  fiber = fiber.updateQueue;\n  if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n    var queueLanes = fiber.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    fiber.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n  var queue = workInProgress.updateQueue,\n    current = workInProgress.alternate;\n  if (\n    null !== current &&\n    ((current = current.updateQueue), queue === current)\n  ) {\n    var newFirst = null,\n      newLast = null;\n    queue = queue.firstBaseUpdate;\n    if (null !== queue) {\n      do {\n        var clone = {\n          lane: queue.lane,\n          tag: queue.tag,\n          payload: queue.payload,\n          callback: null,\n          next: null\n        };\n        null === newLast\n          ? (newFirst = newLast = clone)\n          : (newLast = newLast.next = clone);\n        queue = queue.next;\n      } while (null !== queue);\n      null === newLast\n        ? (newFirst = newLast = capturedUpdate)\n        : (newLast = newLast.next = capturedUpdate);\n    } else newFirst = newLast = capturedUpdate;\n    queue = {\n      baseState: current.baseState,\n      firstBaseUpdate: newFirst,\n      lastBaseUpdate: newLast,\n      shared: current.shared,\n      callbacks: current.callbacks\n    };\n    workInProgress.updateQueue = queue;\n    return;\n  }\n  workInProgress = queue.lastBaseUpdate;\n  null === workInProgress\n    ? (queue.firstBaseUpdate = capturedUpdate)\n    : (workInProgress.next = capturedUpdate);\n  queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n  if (didReadFromEntangledAsyncAction) {\n    var entangledActionThenable = currentEntangledActionThenable;\n    if (null !== entangledActionThenable) throw entangledActionThenable;\n  }\n}\nfunction processUpdateQueue(\n  workInProgress$jscomp$0,\n  props,\n  instance$jscomp$0,\n  renderLanes\n) {\n  didReadFromEntangledAsyncAction = !1;\n  var queue = workInProgress$jscomp$0.updateQueue;\n  hasForceUpdate = !1;\n  var firstBaseUpdate = queue.firstBaseUpdate,\n    lastBaseUpdate = queue.lastBaseUpdate,\n    pendingQueue = queue.shared.pending;\n  if (null !== pendingQueue) {\n    queue.shared.pending = null;\n    var lastPendingUpdate = pendingQueue,\n      firstPendingUpdate = lastPendingUpdate.next;\n    lastPendingUpdate.next = null;\n    null === lastBaseUpdate\n      ? (firstBaseUpdate = firstPendingUpdate)\n      : (lastBaseUpdate.next = firstPendingUpdate);\n    lastBaseUpdate = lastPendingUpdate;\n    var current = workInProgress$jscomp$0.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      (pendingQueue = current.lastBaseUpdate),\n      pendingQueue !== lastBaseUpdate &&\n        (null === pendingQueue\n          ? (current.firstBaseUpdate = firstPendingUpdate)\n          : (pendingQueue.next = firstPendingUpdate),\n        (current.lastBaseUpdate = lastPendingUpdate)));\n  }\n  if (null !== firstBaseUpdate) {\n    var newState = queue.baseState;\n    lastBaseUpdate = 0;\n    current = firstPendingUpdate = lastPendingUpdate = null;\n    pendingQueue = firstBaseUpdate;\n    do {\n      var updateLane = pendingQueue.lane & -536870913,\n        isHiddenUpdate = updateLane !== pendingQueue.lane;\n      if (\n        isHiddenUpdate\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        0 !== updateLane &&\n          updateLane === currentEntangledLane &&\n          (didReadFromEntangledAsyncAction = !0);\n        null !== current &&\n          (current = current.next =\n            {\n              lane: 0,\n              tag: pendingQueue.tag,\n              payload: pendingQueue.payload,\n              callback: null,\n              next: null\n            });\n        a: {\n          var workInProgress = workInProgress$jscomp$0,\n            update = pendingQueue;\n          updateLane = props;\n          var instance = instance$jscomp$0;\n          switch (update.tag) {\n            case 1:\n              workInProgress = update.payload;\n              if (\"function\" === typeof workInProgress) {\n                newState = workInProgress.call(instance, newState, updateLane);\n                break a;\n              }\n              newState = workInProgress;\n              break a;\n            case 3:\n              workInProgress.flags = (workInProgress.flags & -65537) | 128;\n            case 0:\n              workInProgress = update.payload;\n              updateLane =\n                \"function\" === typeof workInProgress\n                  ? workInProgress.call(instance, newState, updateLane)\n                  : workInProgress;\n              if (null === updateLane || void 0 === updateLane) break a;\n              newState = assign({}, newState, updateLane);\n              break a;\n            case 2:\n              hasForceUpdate = !0;\n          }\n        }\n        updateLane = pendingQueue.callback;\n        null !== updateLane &&\n          ((workInProgress$jscomp$0.flags |= 64),\n          isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n          (isHiddenUpdate = queue.callbacks),\n          null === isHiddenUpdate\n            ? (queue.callbacks = [updateLane])\n            : isHiddenUpdate.push(updateLane));\n      } else\n        (isHiddenUpdate = {\n          lane: updateLane,\n          tag: pendingQueue.tag,\n          payload: pendingQueue.payload,\n          callback: pendingQueue.callback,\n          next: null\n        }),\n          null === current\n            ? ((firstPendingUpdate = current = isHiddenUpdate),\n              (lastPendingUpdate = newState))\n            : (current = current.next = isHiddenUpdate),\n          (lastBaseUpdate |= updateLane);\n      pendingQueue = pendingQueue.next;\n      if (null === pendingQueue)\n        if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n          break;\n        else\n          (isHiddenUpdate = pendingQueue),\n            (pendingQueue = isHiddenUpdate.next),\n            (isHiddenUpdate.next = null),\n            (queue.lastBaseUpdate = isHiddenUpdate),\n            (queue.shared.pending = null);\n    } while (1);\n    null === current && (lastPendingUpdate = newState);\n    queue.baseState = lastPendingUpdate;\n    queue.firstBaseUpdate = firstPendingUpdate;\n    queue.lastBaseUpdate = current;\n    null === firstBaseUpdate && (queue.shared.lanes = 0);\n    workInProgressRootSkippedLanes |= lastBaseUpdate;\n    workInProgress$jscomp$0.lanes = lastBaseUpdate;\n    workInProgress$jscomp$0.memoizedState = newState;\n  }\n}\nfunction callCallback(callback, context) {\n  if (\"function\" !== typeof callback)\n    throw Error(formatProdErrorMessage(191, callback));\n  callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n  var callbacks = updateQueue.callbacks;\n  if (null !== callbacks)\n    for (\n      updateQueue.callbacks = null, updateQueue = 0;\n      updateQueue < callbacks.length;\n      updateQueue++\n    )\n      callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n  prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n  fiber = entangledRenderLanes;\n  push(prevEntangledRenderLanesCursor, fiber);\n  push(currentTreeHiddenStackCursor, context);\n  entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n  push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n  push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n  entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n  pop(currentTreeHiddenStackCursor);\n  pop(prevEntangledRenderLanesCursor);\n}\nvar renderLanes = 0,\n  currentlyRenderingFiber = null,\n  currentHook = null,\n  workInProgressHook = null,\n  didScheduleRenderPhaseUpdate = !1,\n  didScheduleRenderPhaseUpdateDuringThisPass = !1,\n  shouldDoubleInvokeUserFnsInHooksDEV = !1,\n  localIdCounter = 0,\n  thenableIndexCounter$1 = 0,\n  thenableState$1 = null,\n  globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n  throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  if (null === prevDeps) return !1;\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n    if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n  return !0;\n}\nfunction renderWithHooks(\n  current,\n  workInProgress,\n  Component,\n  props,\n  secondArg,\n  nextRenderLanes\n) {\n  renderLanes = nextRenderLanes;\n  currentlyRenderingFiber = workInProgress;\n  workInProgress.memoizedState = null;\n  workInProgress.updateQueue = null;\n  workInProgress.lanes = 0;\n  ReactSharedInternals.H =\n    null === current || null === current.memoizedState\n      ? HooksDispatcherOnMount\n      : HooksDispatcherOnUpdate;\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  nextRenderLanes = Component(props, secondArg);\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  didScheduleRenderPhaseUpdateDuringThisPass &&\n    (nextRenderLanes = renderWithHooksAgain(\n      workInProgress,\n      Component,\n      props,\n      secondArg\n    ));\n  finishRenderingHooks(current);\n  return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdate = !1;\n  thenableIndexCounter$1 = 0;\n  thenableState$1 = null;\n  if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n  null === current ||\n    didReceiveUpdate ||\n    ((current = current.dependencies),\n    null !== current &&\n      checkIfContextChanged(current) &&\n      (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n  currentlyRenderingFiber = workInProgress;\n  var numberOfReRenders = 0;\n  do {\n    didScheduleRenderPhaseUpdateDuringThisPass && (thenableState$1 = null);\n    thenableIndexCounter$1 = 0;\n    didScheduleRenderPhaseUpdateDuringThisPass = !1;\n    if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n    numberOfReRenders += 1;\n    workInProgressHook = currentHook = null;\n    if (null != workInProgress.updateQueue) {\n      var children = workInProgress.updateQueue;\n      children.lastEffect = null;\n      children.events = null;\n      children.stores = null;\n      null != children.memoCache && (children.memoCache.index = 0);\n    }\n    ReactSharedInternals.H = HooksDispatcherOnRerender;\n    children = Component(props, secondArg);\n  } while (didScheduleRenderPhaseUpdateDuringThisPass);\n  return children;\n}\nfunction TransitionAwareHostComponent() {\n  var dispatcher = ReactSharedInternals.H,\n    maybeThenable = dispatcher.useState()[0];\n  maybeThenable =\n    \"function\" === typeof maybeThenable.then\n      ? useThenable(maybeThenable)\n      : maybeThenable;\n  dispatcher = dispatcher.useState()[0];\n  (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n    (currentlyRenderingFiber.flags |= 1024);\n  return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n  var didRenderIdHook = 0 !== localIdCounter;\n  localIdCounter = 0;\n  return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n  workInProgress.updateQueue = current.updateQueue;\n  workInProgress.flags &= -2053;\n  current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n  if (didScheduleRenderPhaseUpdate) {\n    for (\n      workInProgress = workInProgress.memoizedState;\n      null !== workInProgress;\n\n    ) {\n      var queue = workInProgress.queue;\n      null !== queue && (queue.pending = null);\n      workInProgress = workInProgress.next;\n    }\n    didScheduleRenderPhaseUpdate = !1;\n  }\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdateDuringThisPass = !1;\n  thenableIndexCounter$1 = localIdCounter = 0;\n  thenableState$1 = null;\n}\nfunction mountWorkInProgressHook() {\n  var hook = {\n    memoizedState: null,\n    baseState: null,\n    baseQueue: null,\n    queue: null,\n    next: null\n  };\n  null === workInProgressHook\n    ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n    : (workInProgressHook = workInProgressHook.next = hook);\n  return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n  if (null === currentHook) {\n    var nextCurrentHook = currentlyRenderingFiber.alternate;\n    nextCurrentHook =\n      null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n  } else nextCurrentHook = currentHook.next;\n  var nextWorkInProgressHook =\n    null === workInProgressHook\n      ? currentlyRenderingFiber.memoizedState\n      : workInProgressHook.next;\n  if (null !== nextWorkInProgressHook)\n    (workInProgressHook = nextWorkInProgressHook),\n      (currentHook = nextCurrentHook);\n  else {\n    if (null === nextCurrentHook) {\n      if (null === currentlyRenderingFiber.alternate)\n        throw Error(formatProdErrorMessage(467));\n      throw Error(formatProdErrorMessage(310));\n    }\n    currentHook = nextCurrentHook;\n    nextCurrentHook = {\n      memoizedState: currentHook.memoizedState,\n      baseState: currentHook.baseState,\n      baseQueue: currentHook.baseQueue,\n      queue: currentHook.queue,\n      next: null\n    };\n    null === workInProgressHook\n      ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n          nextCurrentHook)\n      : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n  }\n  return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n  return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n  var index = thenableIndexCounter$1;\n  thenableIndexCounter$1 += 1;\n  null === thenableState$1 && (thenableState$1 = []);\n  thenable = trackUsedThenable(thenableState$1, thenable, index);\n  index = currentlyRenderingFiber;\n  null ===\n    (null === workInProgressHook\n      ? index.memoizedState\n      : workInProgressHook.next) &&\n    ((index = index.alternate),\n    (ReactSharedInternals.H =\n      null === index || null === index.memoizedState\n        ? HooksDispatcherOnMount\n        : HooksDispatcherOnUpdate));\n  return thenable;\n}\nfunction use(usable) {\n  if (null !== usable && \"object\" === typeof usable) {\n    if (\"function\" === typeof usable.then) return useThenable(usable);\n    if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n  }\n  throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n  var memoCache = null,\n    updateQueue = currentlyRenderingFiber.updateQueue;\n  null !== updateQueue && (memoCache = updateQueue.memoCache);\n  if (null == memoCache) {\n    var current = currentlyRenderingFiber.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      null !== current &&\n        ((current = current.memoCache),\n        null != current &&\n          (memoCache = {\n            data: current.data.map(function (array) {\n              return array.slice();\n            }),\n            index: 0\n          })));\n  }\n  null == memoCache && (memoCache = { data: [], index: 0 });\n  null === updateQueue &&\n    ((updateQueue = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = updateQueue));\n  updateQueue.memoCache = memoCache;\n  updateQueue = memoCache.data[memoCache.index];\n  if (void 0 === updateQueue)\n    for (\n      updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n      current < size;\n      current++\n    )\n      updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n  memoCache.index++;\n  return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n  return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n  var hook = updateWorkInProgressHook();\n  return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n  var queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var baseQueue = hook.baseQueue,\n    pendingQueue = queue.pending;\n  if (null !== pendingQueue) {\n    if (null !== baseQueue) {\n      var baseFirst = baseQueue.next;\n      baseQueue.next = pendingQueue.next;\n      pendingQueue.next = baseFirst;\n    }\n    current.baseQueue = baseQueue = pendingQueue;\n    queue.pending = null;\n  }\n  pendingQueue = hook.baseState;\n  if (null === baseQueue) hook.memoizedState = pendingQueue;\n  else {\n    current = baseQueue.next;\n    var newBaseQueueFirst = (baseFirst = null),\n      newBaseQueueLast = null,\n      update = current,\n      didReadFromEntangledAsyncAction$32 = !1;\n    do {\n      var updateLane = update.lane & -536870913;\n      if (\n        updateLane !== update.lane\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        var revertLane = update.revertLane;\n        if (0 === revertLane)\n          null !== newBaseQueueLast &&\n            (newBaseQueueLast = newBaseQueueLast.next =\n              {\n                lane: 0,\n                revertLane: 0,\n                action: update.action,\n                hasEagerState: update.hasEagerState,\n                eagerState: update.eagerState,\n                next: null\n              }),\n            updateLane === currentEntangledLane &&\n              (didReadFromEntangledAsyncAction$32 = !0);\n        else if ((renderLanes & revertLane) === revertLane) {\n          update = update.next;\n          revertLane === currentEntangledLane &&\n            (didReadFromEntangledAsyncAction$32 = !0);\n          continue;\n        } else\n          (updateLane = {\n            lane: 0,\n            revertLane: update.revertLane,\n            action: update.action,\n            hasEagerState: update.hasEagerState,\n            eagerState: update.eagerState,\n            next: null\n          }),\n            null === newBaseQueueLast\n              ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n                (baseFirst = pendingQueue))\n              : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n            (currentlyRenderingFiber.lanes |= revertLane),\n            (workInProgressRootSkippedLanes |= revertLane);\n        updateLane = update.action;\n        shouldDoubleInvokeUserFnsInHooksDEV &&\n          reducer(pendingQueue, updateLane);\n        pendingQueue = update.hasEagerState\n          ? update.eagerState\n          : reducer(pendingQueue, updateLane);\n      } else\n        (revertLane = {\n          lane: updateLane,\n          revertLane: update.revertLane,\n          action: update.action,\n          hasEagerState: update.hasEagerState,\n          eagerState: update.eagerState,\n          next: null\n        }),\n          null === newBaseQueueLast\n            ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n              (baseFirst = pendingQueue))\n            : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n          (currentlyRenderingFiber.lanes |= updateLane),\n          (workInProgressRootSkippedLanes |= updateLane);\n      update = update.next;\n    } while (null !== update && update !== current);\n    null === newBaseQueueLast\n      ? (baseFirst = pendingQueue)\n      : (newBaseQueueLast.next = newBaseQueueFirst);\n    if (\n      !objectIs(pendingQueue, hook.memoizedState) &&\n      ((didReceiveUpdate = !0),\n      didReadFromEntangledAsyncAction$32 &&\n        ((reducer = currentEntangledActionThenable), null !== reducer))\n    )\n      throw reducer;\n    hook.memoizedState = pendingQueue;\n    hook.baseState = baseFirst;\n    hook.baseQueue = newBaseQueueLast;\n    queue.lastRenderedState = pendingQueue;\n  }\n  null === baseQueue && (queue.lanes = 0);\n  return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n  var hook = updateWorkInProgressHook(),\n    queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var dispatch = queue.dispatch,\n    lastRenderPhaseUpdate = queue.pending,\n    newState = hook.memoizedState;\n  if (null !== lastRenderPhaseUpdate) {\n    queue.pending = null;\n    var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n    do (newState = reducer(newState, update.action)), (update = update.next);\n    while (update !== lastRenderPhaseUpdate);\n    objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n    hook.memoizedState = newState;\n    null === hook.baseQueue && (hook.baseState = newState);\n    queue.lastRenderedState = newState;\n  }\n  return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  var fiber = currentlyRenderingFiber,\n    hook = updateWorkInProgressHook(),\n    isHydrating$jscomp$0 = isHydrating;\n  if (isHydrating$jscomp$0) {\n    if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n    getServerSnapshot = getServerSnapshot();\n  } else getServerSnapshot = getSnapshot();\n  var snapshotChanged = !objectIs(\n    (currentHook || hook).memoizedState,\n    getServerSnapshot\n  );\n  snapshotChanged &&\n    ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n  hook = hook.queue;\n  var create = subscribeToStore.bind(null, fiber, hook, subscribe);\n  updateEffectImpl(2048, 8, create, [subscribe]);\n  if (\n    hook.getSnapshot !== getSnapshot ||\n    snapshotChanged ||\n    (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n  ) {\n    fiber.flags |= 2048;\n    pushSimpleEffect(\n      9,\n      createEffectInstance(),\n      updateStoreInstance.bind(\n        null,\n        fiber,\n        hook,\n        getServerSnapshot,\n        getSnapshot\n      ),\n      null\n    );\n    if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n    isHydrating$jscomp$0 ||\n      0 !== (renderLanes & 124) ||\n      pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n  }\n  return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n  fiber.flags |= 16384;\n  fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n  getSnapshot = currentlyRenderingFiber.updateQueue;\n  null === getSnapshot\n    ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = getSnapshot),\n      (getSnapshot.stores = [fiber]))\n    : ((renderedSnapshot = getSnapshot.stores),\n      null === renderedSnapshot\n        ? (getSnapshot.stores = [fiber])\n        : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n  inst.value = nextSnapshot;\n  inst.getSnapshot = getSnapshot;\n  checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n  return subscribe(function () {\n    checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n  });\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction forceStoreRerender(fiber) {\n  var root = enqueueConcurrentRenderForLane(fiber, 2);\n  null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n  var hook = mountWorkInProgressHook();\n  if (\"function\" === typeof initialState) {\n    var initialStateInitializer = initialState;\n    initialState = initialStateInitializer();\n    if (shouldDoubleInvokeUserFnsInHooksDEV) {\n      setIsStrictModeForDevtools(!0);\n      try {\n        initialStateInitializer();\n      } finally {\n        setIsStrictModeForDevtools(!1);\n      }\n    }\n  }\n  hook.memoizedState = hook.baseState = initialState;\n  hook.queue = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: basicStateReducer,\n    lastRenderedState: initialState\n  };\n  return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n  hook.baseState = passthrough;\n  return updateReducerImpl(\n    hook,\n    currentHook,\n    \"function\" === typeof reducer ? reducer : basicStateReducer\n  );\n}\nfunction dispatchActionState(\n  fiber,\n  actionQueue,\n  setPendingState,\n  setState,\n  payload\n) {\n  if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n  fiber = actionQueue.action;\n  if (null !== fiber) {\n    var actionNode = {\n      payload: payload,\n      action: fiber,\n      next: null,\n      isTransition: !0,\n      status: \"pending\",\n      value: null,\n      reason: null,\n      listeners: [],\n      then: function (listener) {\n        actionNode.listeners.push(listener);\n      }\n    };\n    null !== ReactSharedInternals.T\n      ? setPendingState(!0)\n      : (actionNode.isTransition = !1);\n    setState(actionNode);\n    setPendingState = actionQueue.pending;\n    null === setPendingState\n      ? ((actionNode.next = actionQueue.pending = actionNode),\n        runActionStateAction(actionQueue, actionNode))\n      : ((actionNode.next = setPendingState.next),\n        (actionQueue.pending = setPendingState.next = actionNode));\n  }\n}\nfunction runActionStateAction(actionQueue, node) {\n  var action = node.action,\n    payload = node.payload,\n    prevState = actionQueue.state;\n  if (node.isTransition) {\n    var prevTransition = ReactSharedInternals.T,\n      currentTransition = {};\n    ReactSharedInternals.T = currentTransition;\n    try {\n      var returnValue = action(prevState, payload),\n        onStartTransitionFinish = ReactSharedInternals.S;\n      null !== onStartTransitionFinish &&\n        onStartTransitionFinish(currentTransition, returnValue);\n      handleActionReturnValue(actionQueue, node, returnValue);\n    } catch (error) {\n      onActionError(actionQueue, node, error);\n    } finally {\n      ReactSharedInternals.T = prevTransition;\n    }\n  } else\n    try {\n      (prevTransition = action(prevState, payload)),\n        handleActionReturnValue(actionQueue, node, prevTransition);\n    } catch (error$38) {\n      onActionError(actionQueue, node, error$38);\n    }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n  null !== returnValue &&\n  \"object\" === typeof returnValue &&\n  \"function\" === typeof returnValue.then\n    ? returnValue.then(\n        function (nextState) {\n          onActionSuccess(actionQueue, node, nextState);\n        },\n        function (error) {\n          return onActionError(actionQueue, node, error);\n        }\n      )\n    : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n  actionNode.status = \"fulfilled\";\n  actionNode.value = nextState;\n  notifyActionListeners(actionNode);\n  actionQueue.state = nextState;\n  actionNode = actionQueue.pending;\n  null !== actionNode &&\n    ((nextState = actionNode.next),\n    nextState === actionNode\n      ? (actionQueue.pending = null)\n      : ((nextState = nextState.next),\n        (actionNode.next = nextState),\n        runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n  var last = actionQueue.pending;\n  actionQueue.pending = null;\n  if (null !== last) {\n    last = last.next;\n    do\n      (actionNode.status = \"rejected\"),\n        (actionNode.reason = error),\n        notifyActionListeners(actionNode),\n        (actionNode = actionNode.next);\n    while (actionNode !== last);\n  }\n  actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n  actionNode = actionNode.listeners;\n  for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n  return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n  if (isHydrating) {\n    var ssrFormState = workInProgressRoot.formState;\n    if (null !== ssrFormState) {\n      a: {\n        var JSCompiler_inline_result = currentlyRenderingFiber;\n        if (isHydrating) {\n          if (nextHydratableInstance) {\n            b: {\n              var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n              for (\n                var inRootOrSingleton = rootOrSingletonContext;\n                8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n              ) {\n                if (!inRootOrSingleton) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n                JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n                  JSCompiler_inline_result$jscomp$0.nextSibling\n                );\n                if (null === JSCompiler_inline_result$jscomp$0) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n              }\n              inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n              JSCompiler_inline_result$jscomp$0 =\n                \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n                  ? JSCompiler_inline_result$jscomp$0\n                  : null;\n            }\n            if (JSCompiler_inline_result$jscomp$0) {\n              nextHydratableInstance = getNextHydratable(\n                JSCompiler_inline_result$jscomp$0.nextSibling\n              );\n              JSCompiler_inline_result =\n                \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n              break a;\n            }\n          }\n          throwOnHydrationMismatch(JSCompiler_inline_result);\n        }\n        JSCompiler_inline_result = !1;\n      }\n      JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n    }\n  }\n  ssrFormState = mountWorkInProgressHook();\n  ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n  JSCompiler_inline_result = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: actionStateReducer,\n    lastRenderedState: initialStateProp\n  };\n  ssrFormState.queue = JSCompiler_inline_result;\n  ssrFormState = dispatchSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result\n  );\n  JSCompiler_inline_result.dispatch = ssrFormState;\n  JSCompiler_inline_result = mountStateImpl(!1);\n  inRootOrSingleton = dispatchOptimisticSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    !1,\n    JSCompiler_inline_result.queue\n  );\n  JSCompiler_inline_result = mountWorkInProgressHook();\n  JSCompiler_inline_result$jscomp$0 = {\n    state: initialStateProp,\n    dispatch: null,\n    action: action,\n    pending: null\n  };\n  JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n  ssrFormState = dispatchActionState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result$jscomp$0,\n    inRootOrSingleton,\n    ssrFormState\n  );\n  JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n  JSCompiler_inline_result.memoizedState = action;\n  return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n  var stateHook = updateWorkInProgressHook();\n  return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n  currentStateHook = updateReducerImpl(\n    stateHook,\n    currentStateHook,\n    actionStateReducer\n  )[0];\n  stateHook = updateReducer(basicStateReducer)[0];\n  if (\n    \"object\" === typeof currentStateHook &&\n    null !== currentStateHook &&\n    \"function\" === typeof currentStateHook.then\n  )\n    try {\n      var state = useThenable(currentStateHook);\n    } catch (x) {\n      if (x === SuspenseException) throw SuspenseActionException;\n      throw x;\n    }\n  else state = currentStateHook;\n  currentStateHook = updateWorkInProgressHook();\n  var actionQueue = currentStateHook.queue,\n    dispatch = actionQueue.dispatch;\n  action !== currentStateHook.memoizedState &&\n    ((currentlyRenderingFiber.flags |= 2048),\n    pushSimpleEffect(\n      9,\n      createEffectInstance(),\n      actionStateActionEffect.bind(null, actionQueue, action),\n      null\n    ));\n  return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n  actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n  var stateHook = updateWorkInProgressHook(),\n    currentStateHook = currentHook;\n  if (null !== currentStateHook)\n    return updateActionStateImpl(stateHook, currentStateHook, action);\n  updateWorkInProgressHook();\n  stateHook = stateHook.memoizedState;\n  currentStateHook = updateWorkInProgressHook();\n  var dispatch = currentStateHook.queue.dispatch;\n  currentStateHook.memoizedState = action;\n  return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, createDeps) {\n  tag = { tag: tag, create: create, deps: createDeps, inst: inst, next: null };\n  inst = currentlyRenderingFiber.updateQueue;\n  null === inst &&\n    ((inst = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = inst));\n  create = inst.lastEffect;\n  null === create\n    ? (inst.lastEffect = tag.next = tag)\n    : ((createDeps = create.next),\n      (create.next = tag),\n      (tag.next = createDeps),\n      (inst.lastEffect = tag));\n  return tag;\n}\nfunction createEffectInstance() {\n  return { destroy: void 0, resource: void 0 };\n}\nfunction updateRef() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, createDeps) {\n  var hook = mountWorkInProgressHook();\n  createDeps = void 0 === createDeps ? null : createDeps;\n  currentlyRenderingFiber.flags |= fiberFlags;\n  hook.memoizedState = pushSimpleEffect(\n    1 | hookFlags,\n    createEffectInstance(),\n    create,\n    createDeps\n  );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var inst = hook.memoizedState.inst;\n  null !== currentHook &&\n  null !== deps &&\n  areHookInputsEqual(deps, currentHook.memoizedState.deps)\n    ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n    : ((currentlyRenderingFiber.flags |= fiberFlags),\n      (hook.memoizedState = pushSimpleEffect(\n        1 | hookFlags,\n        inst,\n        create,\n        deps\n      )));\n}\nfunction mountEffect(create, createDeps) {\n  mountEffectImpl(8390656, 8, create, createDeps);\n}\nfunction updateEffect(create, createDeps) {\n  updateEffectImpl(2048, 8, create, createDeps);\n}\nfunction updateInsertionEffect(create, deps) {\n  return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n  return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n  if (\"function\" === typeof ref) {\n    create = create();\n    var refCleanup = ref(create);\n    return function () {\n      \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n    };\n  }\n  if (null !== ref && void 0 !== ref)\n    return (\n      (create = create()),\n      (ref.current = create),\n      function () {\n        ref.current = null;\n      }\n    );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n  deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n  updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  hook.memoizedState = [callback, deps];\n  return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  prevState = nextCreate();\n  if (shouldDoubleInvokeUserFnsInHooksDEV) {\n    setIsStrictModeForDevtools(!0);\n    try {\n      nextCreate();\n    } finally {\n      setIsStrictModeForDevtools(!1);\n    }\n  }\n  hook.memoizedState = [prevState, deps];\n  return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n  if (void 0 === initialValue || 0 !== (renderLanes & 1073741824))\n    return (hook.memoizedState = value);\n  hook.memoizedState = initialValue;\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n  if (objectIs(value, prevValue)) return value;\n  if (null !== currentTreeHiddenStackCursor.current)\n    return (\n      (hook = mountDeferredValueImpl(hook, value, initialValue)),\n      objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n      hook\n    );\n  if (0 === (renderLanes & 42))\n    return (didReceiveUpdate = !0), (hook.memoizedState = value);\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  ReactDOMSharedInternals.p =\n    0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n  try {\n    var returnValue = callback(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    if (\n      null !== returnValue &&\n      \"object\" === typeof returnValue &&\n      \"function\" === typeof returnValue.then\n    ) {\n      var thenableForFinishedState = chainThenableValue(\n        returnValue,\n        finishedState\n      );\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        thenableForFinishedState,\n        requestUpdateLane(fiber)\n      );\n    } else\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        finishedState,\n        requestUpdateLane(fiber)\n      );\n  } catch (error) {\n    dispatchSetStateInternal(\n      fiber,\n      queue,\n      { then: function () {}, status: \"rejected\", reason: error },\n      requestUpdateLane()\n    );\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction noop$2() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n  if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n  var queue = ensureFormComponentIsStateful(formFiber).queue;\n  startTransition(\n    formFiber,\n    queue,\n    pendingState,\n    sharedNotPendingObject,\n    null === action\n      ? noop$2\n      : function () {\n          requestFormReset$1(formFiber);\n          return action(formData);\n        }\n  );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n  var existingStateHook = formFiber.memoizedState;\n  if (null !== existingStateHook) return existingStateHook;\n  existingStateHook = {\n    memoizedState: sharedNotPendingObject,\n    baseState: sharedNotPendingObject,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: sharedNotPendingObject\n    },\n    next: null\n  };\n  var initialResetState = {};\n  existingStateHook.next = {\n    memoizedState: initialResetState,\n    baseState: initialResetState,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: initialResetState\n    },\n    next: null\n  };\n  formFiber.memoizedState = existingStateHook;\n  formFiber = formFiber.alternate;\n  null !== formFiber && (formFiber.memoizedState = existingStateHook);\n  return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n  var resetStateQueue = ensureFormComponentIsStateful(formFiber).next.queue;\n  dispatchSetStateInternal(formFiber, resetStateQueue, {}, requestUpdateLane());\n}\nfunction useHostTransitionStatus() {\n  return readContext(HostTransitionContext);\n}\nfunction updateId() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n  for (var provider = fiber.return; null !== provider; ) {\n    switch (provider.tag) {\n      case 24:\n      case 3:\n        var lane = requestUpdateLane();\n        fiber = createUpdate(lane);\n        var root$41 = enqueueUpdate(provider, fiber, lane);\n        null !== root$41 &&\n          (scheduleUpdateOnFiber(root$41, provider, lane),\n          entangleTransitions(root$41, provider, lane));\n        provider = { cache: createCache() };\n        fiber.payload = provider;\n        return;\n    }\n    provider = provider.return;\n  }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  action = {\n    lane: lane,\n    revertLane: 0,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  isRenderPhaseUpdate(fiber)\n    ? enqueueRenderPhaseUpdate(queue, action)\n    : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n      null !== action &&\n        (scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n  var update = {\n    lane: lane,\n    revertLane: 0,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n  else {\n    var alternate = fiber.alternate;\n    if (\n      0 === fiber.lanes &&\n      (null === alternate || 0 === alternate.lanes) &&\n      ((alternate = queue.lastRenderedReducer), null !== alternate)\n    )\n      try {\n        var currentState = queue.lastRenderedState,\n          eagerState = alternate(currentState, action);\n        update.hasEagerState = !0;\n        update.eagerState = eagerState;\n        if (objectIs(eagerState, currentState))\n          return (\n            enqueueUpdate$1(fiber, queue, update, 0),\n            null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n            !1\n          );\n      } catch (error) {\n      } finally {\n      }\n    action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n    if (null !== action)\n      return (\n        scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane),\n        !0\n      );\n  }\n  return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n  action = {\n    lane: 2,\n    revertLane: requestTransitionLane(),\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) {\n    if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n  } else\n    (throwIfDuringRender = enqueueConcurrentHookUpdate(\n      fiber,\n      queue,\n      action,\n      2\n    )),\n      null !== throwIfDuringRender &&\n        scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n  var alternate = fiber.alternate;\n  return (\n    fiber === currentlyRenderingFiber ||\n    (null !== alternate && alternate === currentlyRenderingFiber)\n  );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n  didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n    !0;\n  var pending = queue.pending;\n  null === pending\n    ? (update.next = update)\n    : ((update.next = pending.next), (pending.next = update));\n  queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n  if (0 !== (lane & 4194048)) {\n    var queueLanes = queue.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    queue.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nvar ContextOnlyDispatcher = {\n    readContext: readContext,\n    use: use,\n    useCallback: throwInvalidHookError,\n    useContext: throwInvalidHookError,\n    useEffect: throwInvalidHookError,\n    useImperativeHandle: throwInvalidHookError,\n    useLayoutEffect: throwInvalidHookError,\n    useInsertionEffect: throwInvalidHookError,\n    useMemo: throwInvalidHookError,\n    useReducer: throwInvalidHookError,\n    useRef: throwInvalidHookError,\n    useState: throwInvalidHookError,\n    useDebugValue: throwInvalidHookError,\n    useDeferredValue: throwInvalidHookError,\n    useTransition: throwInvalidHookError,\n    useSyncExternalStore: throwInvalidHookError,\n    useId: throwInvalidHookError,\n    useHostTransitionStatus: throwInvalidHookError,\n    useFormState: throwInvalidHookError,\n    useActionState: throwInvalidHookError,\n    useOptimistic: throwInvalidHookError,\n    useMemoCache: throwInvalidHookError,\n    useCacheRefresh: throwInvalidHookError\n  },\n  HooksDispatcherOnMount = {\n    readContext: readContext,\n    use: use,\n    useCallback: function (callback, deps) {\n      mountWorkInProgressHook().memoizedState = [\n        callback,\n        void 0 === deps ? null : deps\n      ];\n      return callback;\n    },\n    useContext: readContext,\n    useEffect: mountEffect,\n    useImperativeHandle: function (ref, create, deps) {\n      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n      mountEffectImpl(\n        4194308,\n        4,\n        imperativeHandleEffect.bind(null, create, ref),\n        deps\n      );\n    },\n    useLayoutEffect: function (create, deps) {\n      return mountEffectImpl(4194308, 4, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      mountEffectImpl(4, 2, create, deps);\n    },\n    useMemo: function (nextCreate, deps) {\n      var hook = mountWorkInProgressHook();\n      deps = void 0 === deps ? null : deps;\n      var nextValue = nextCreate();\n      if (shouldDoubleInvokeUserFnsInHooksDEV) {\n        setIsStrictModeForDevtools(!0);\n        try {\n          nextCreate();\n        } finally {\n          setIsStrictModeForDevtools(!1);\n        }\n      }\n      hook.memoizedState = [nextValue, deps];\n      return nextValue;\n    },\n    useReducer: function (reducer, initialArg, init) {\n      var hook = mountWorkInProgressHook();\n      if (void 0 !== init) {\n        var initialState = init(initialArg);\n        if (shouldDoubleInvokeUserFnsInHooksDEV) {\n          setIsStrictModeForDevtools(!0);\n          try {\n            init(initialArg);\n          } finally {\n            setIsStrictModeForDevtools(!1);\n          }\n        }\n      } else initialState = initialArg;\n      hook.memoizedState = hook.baseState = initialState;\n      reducer = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: reducer,\n        lastRenderedState: initialState\n      };\n      hook.queue = reducer;\n      reducer = reducer.dispatch = dispatchReducerAction.bind(\n        null,\n        currentlyRenderingFiber,\n        reducer\n      );\n      return [hook.memoizedState, reducer];\n    },\n    useRef: function (initialValue) {\n      var hook = mountWorkInProgressHook();\n      initialValue = { current: initialValue };\n      return (hook.memoizedState = initialValue);\n    },\n    useState: function (initialState) {\n      initialState = mountStateImpl(initialState);\n      var queue = initialState.queue,\n        dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n      queue.dispatch = dispatch;\n      return [initialState.memoizedState, dispatch];\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = mountWorkInProgressHook();\n      return mountDeferredValueImpl(hook, value, initialValue);\n    },\n    useTransition: function () {\n      var stateHook = mountStateImpl(!1);\n      stateHook = startTransition.bind(\n        null,\n        currentlyRenderingFiber,\n        stateHook.queue,\n        !0,\n        !1\n      );\n      mountWorkInProgressHook().memoizedState = stateHook;\n      return [!1, stateHook];\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      var fiber = currentlyRenderingFiber,\n        hook = mountWorkInProgressHook();\n      if (isHydrating) {\n        if (void 0 === getServerSnapshot)\n          throw Error(formatProdErrorMessage(407));\n        getServerSnapshot = getServerSnapshot();\n      } else {\n        getServerSnapshot = getSnapshot();\n        if (null === workInProgressRoot)\n          throw Error(formatProdErrorMessage(349));\n        0 !== (workInProgressRootRenderLanes & 124) ||\n          pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n      }\n      hook.memoizedState = getServerSnapshot;\n      var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n      hook.queue = inst;\n      mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n        subscribe\n      ]);\n      fiber.flags |= 2048;\n      pushSimpleEffect(\n        9,\n        createEffectInstance(),\n        updateStoreInstance.bind(\n          null,\n          fiber,\n          inst,\n          getServerSnapshot,\n          getSnapshot\n        ),\n        null\n      );\n      return getServerSnapshot;\n    },\n    useId: function () {\n      var hook = mountWorkInProgressHook(),\n        identifierPrefix = workInProgressRoot.identifierPrefix;\n      if (isHydrating) {\n        var JSCompiler_inline_result = treeContextOverflow;\n        var idWithLeadingBit = treeContextId;\n        JSCompiler_inline_result =\n          (\n            idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n          ).toString(32) + JSCompiler_inline_result;\n        identifierPrefix =\n          \"\\u00ab\" + identifierPrefix + \"R\" + JSCompiler_inline_result;\n        JSCompiler_inline_result = localIdCounter++;\n        0 < JSCompiler_inline_result &&\n          (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n        identifierPrefix += \"\\u00bb\";\n      } else\n        (JSCompiler_inline_result = globalClientIdCounter++),\n          (identifierPrefix =\n            \"\\u00ab\" +\n            identifierPrefix +\n            \"r\" +\n            JSCompiler_inline_result.toString(32) +\n            \"\\u00bb\");\n      return (hook.memoizedState = identifierPrefix);\n    },\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: mountActionState,\n    useActionState: mountActionState,\n    useOptimistic: function (passthrough) {\n      var hook = mountWorkInProgressHook();\n      hook.memoizedState = hook.baseState = passthrough;\n      var queue = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: null,\n        lastRenderedState: null\n      };\n      hook.queue = queue;\n      hook = dispatchOptimisticSetState.bind(\n        null,\n        currentlyRenderingFiber,\n        !0,\n        queue\n      );\n      queue.dispatch = hook;\n      return [passthrough, hook];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: function () {\n      return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n        null,\n        currentlyRenderingFiber\n      ));\n    }\n  },\n  HooksDispatcherOnUpdate = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: updateReducer,\n    useRef: updateRef,\n    useState: function () {\n      return updateReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return updateDeferredValueImpl(\n        hook,\n        currentHook.memoizedState,\n        value,\n        initialValue\n      );\n    },\n    useTransition: function () {\n      var booleanOrThenable = updateReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: updateActionState,\n    useActionState: updateActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh\n  },\n  HooksDispatcherOnRerender = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: rerenderReducer,\n    useRef: updateRef,\n    useState: function () {\n      return rerenderReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return null === currentHook\n        ? mountDeferredValueImpl(hook, value, initialValue)\n        : updateDeferredValueImpl(\n            hook,\n            currentHook.memoizedState,\n            value,\n            initialValue\n          );\n    },\n    useTransition: function () {\n      var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: rerenderActionState,\n    useActionState: rerenderActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      if (null !== currentHook)\n        return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n      hook.baseState = passthrough;\n      return [passthrough, hook.queue.dispatch];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh\n  },\n  thenableState = null,\n  thenableIndexCounter = 0;\nfunction unwrapThenable(thenable) {\n  var index = thenableIndexCounter;\n  thenableIndexCounter += 1;\n  null === thenableState && (thenableState = []);\n  return trackUsedThenable(thenableState, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n  element = element.props.ref;\n  workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n  if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n    throw Error(formatProdErrorMessage(525));\n  returnFiber = Object.prototype.toString.call(newChild);\n  throw Error(\n    formatProdErrorMessage(\n      31,\n      \"[object Object]\" === returnFiber\n        ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n        : returnFiber\n    )\n  );\n}\nfunction resolveLazy(lazyType) {\n  var init = lazyType._init;\n  return init(lazyType._payload);\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n  function deleteChild(returnFiber, childToDelete) {\n    if (shouldTrackSideEffects) {\n      var deletions = returnFiber.deletions;\n      null === deletions\n        ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n        : deletions.push(childToDelete);\n    }\n  }\n  function deleteRemainingChildren(returnFiber, currentFirstChild) {\n    if (!shouldTrackSideEffects) return null;\n    for (; null !== currentFirstChild; )\n      deleteChild(returnFiber, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return null;\n  }\n  function mapRemainingChildren(currentFirstChild) {\n    for (var existingChildren = new Map(); null !== currentFirstChild; )\n      null !== currentFirstChild.key\n        ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n        : existingChildren.set(currentFirstChild.index, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return existingChildren;\n  }\n  function useFiber(fiber, pendingProps) {\n    fiber = createWorkInProgress(fiber, pendingProps);\n    fiber.index = 0;\n    fiber.sibling = null;\n    return fiber;\n  }\n  function placeChild(newFiber, lastPlacedIndex, newIndex) {\n    newFiber.index = newIndex;\n    if (!shouldTrackSideEffects)\n      return (newFiber.flags |= 1048576), lastPlacedIndex;\n    newIndex = newFiber.alternate;\n    if (null !== newIndex)\n      return (\n        (newIndex = newIndex.index),\n        newIndex < lastPlacedIndex\n          ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n          : newIndex\n      );\n    newFiber.flags |= 67108866;\n    return lastPlacedIndex;\n  }\n  function placeSingleChild(newFiber) {\n    shouldTrackSideEffects &&\n      null === newFiber.alternate &&\n      (newFiber.flags |= 67108866);\n    return newFiber;\n  }\n  function updateTextNode(returnFiber, current, textContent, lanes) {\n    if (null === current || 6 !== current.tag)\n      return (\n        (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, textContent);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateElement(returnFiber, current, element, lanes) {\n    var elementType = element.type;\n    if (elementType === REACT_FRAGMENT_TYPE)\n      return updateFragment(\n        returnFiber,\n        current,\n        element.props.children,\n        lanes,\n        element.key\n      );\n    if (\n      null !== current &&\n      (current.elementType === elementType ||\n        (\"object\" === typeof elementType &&\n          null !== elementType &&\n          elementType.$$typeof === REACT_LAZY_TYPE &&\n          resolveLazy(elementType) === current.type))\n    )\n      return (\n        (current = useFiber(current, element.props)),\n        coerceRef(current, element),\n        (current.return = returnFiber),\n        current\n      );\n    current = createFiberFromTypeAndProps(\n      element.type,\n      element.key,\n      element.props,\n      null,\n      returnFiber.mode,\n      lanes\n    );\n    coerceRef(current, element);\n    current.return = returnFiber;\n    return current;\n  }\n  function updatePortal(returnFiber, current, portal, lanes) {\n    if (\n      null === current ||\n      4 !== current.tag ||\n      current.stateNode.containerInfo !== portal.containerInfo ||\n      current.stateNode.implementation !== portal.implementation\n    )\n      return (\n        (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, portal.children || []);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateFragment(returnFiber, current, fragment, lanes, key) {\n    if (null === current || 7 !== current.tag)\n      return (\n        (current = createFiberFromFragment(\n          fragment,\n          returnFiber.mode,\n          lanes,\n          key\n        )),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, fragment);\n    current.return = returnFiber;\n    return current;\n  }\n  function createChild(returnFiber, newChild, lanes) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (newChild = createFiberFromText(\n          \"\" + newChild,\n          returnFiber.mode,\n          lanes\n        )),\n        (newChild.return = returnFiber),\n        newChild\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (lanes = createFiberFromTypeAndProps(\n              newChild.type,\n              newChild.key,\n              newChild.props,\n              null,\n              returnFiber.mode,\n              lanes\n            )),\n            coerceRef(lanes, newChild),\n            (lanes.return = returnFiber),\n            lanes\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (newChild = createFiberFromPortal(\n              newChild,\n              returnFiber.mode,\n              lanes\n            )),\n            (newChild.return = returnFiber),\n            newChild\n          );\n        case REACT_LAZY_TYPE:\n          var init = newChild._init;\n          newChild = init(newChild._payload);\n          return createChild(returnFiber, newChild, lanes);\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (newChild = createFiberFromFragment(\n            newChild,\n            returnFiber.mode,\n            lanes,\n            null\n          )),\n          (newChild.return = returnFiber),\n          newChild\n        );\n      if (\"function\" === typeof newChild.then)\n        return createChild(returnFiber, unwrapThenable(newChild), lanes);\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return createChild(\n          returnFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n    var key = null !== oldFiber ? oldFiber.key : null;\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return null !== key\n        ? null\n        : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return newChild.key === key\n            ? updateElement(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_PORTAL_TYPE:\n          return newChild.key === key\n            ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_LAZY_TYPE:\n          return (\n            (key = newChild._init),\n            (newChild = key(newChild._payload)),\n            updateSlot(returnFiber, oldFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return null !== key\n          ? null\n          : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n      if (\"function\" === typeof newChild.then)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateFromMap(\n    existingChildren,\n    returnFiber,\n    newIdx,\n    newChild,\n    lanes\n  ) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (existingChildren = existingChildren.get(newIdx) || null),\n        updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updateElement(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updatePortal(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_LAZY_TYPE:\n          var init = newChild._init;\n          newChild = init(newChild._payload);\n          return updateFromMap(\n            existingChildren,\n            returnFiber,\n            newIdx,\n            newChild,\n            lanes\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (existingChildren = existingChildren.get(newIdx) || null),\n          updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n        );\n      if (\"function\" === typeof newChild.then)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function reconcileChildrenArray(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null;\n      null !== oldFiber && newIdx < newChildren.length;\n      newIdx++\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(\n        returnFiber,\n        oldFiber,\n        newChildren[newIdx],\n        lanes\n      );\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (newIdx === newChildren.length)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; newIdx < newChildren.length; newIdx++)\n        (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n          null !== oldFiber &&\n            ((currentFirstChild = placeChild(\n              oldFiber,\n              currentFirstChild,\n              newIdx\n            )),\n            null === previousNewFiber\n              ? (resultingFirstChild = oldFiber)\n              : (previousNewFiber.sibling = oldFiber),\n            (previousNewFiber = oldFiber));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      newIdx < newChildren.length;\n      newIdx++\n    )\n      (nextOldFiber = updateFromMap(\n        oldFiber,\n        returnFiber,\n        newIdx,\n        newChildren[newIdx],\n        lanes\n      )),\n        null !== nextOldFiber &&\n          (shouldTrackSideEffects &&\n            null !== nextOldFiber.alternate &&\n            oldFiber.delete(\n              null === nextOldFiber.key ? newIdx : nextOldFiber.key\n            ),\n          (currentFirstChild = placeChild(\n            nextOldFiber,\n            currentFirstChild,\n            newIdx\n          )),\n          null === previousNewFiber\n            ? (resultingFirstChild = nextOldFiber)\n            : (previousNewFiber.sibling = nextOldFiber),\n          (previousNewFiber = nextOldFiber));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildrenIterator(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    if (null == newChildren) throw Error(formatProdErrorMessage(151));\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null,\n        step = newChildren.next();\n      null !== oldFiber && !step.done;\n      newIdx++, step = newChildren.next()\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (step.done)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; !step.done; newIdx++, step = newChildren.next())\n        (step = createChild(returnFiber, step.value, lanes)),\n          null !== step &&\n            ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n            null === previousNewFiber\n              ? (resultingFirstChild = step)\n              : (previousNewFiber.sibling = step),\n            (previousNewFiber = step));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      !step.done;\n      newIdx++, step = newChildren.next()\n    )\n      (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n        null !== step &&\n          (shouldTrackSideEffects &&\n            null !== step.alternate &&\n            oldFiber.delete(null === step.key ? newIdx : step.key),\n          (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n          null === previousNewFiber\n            ? (resultingFirstChild = step)\n            : (previousNewFiber.sibling = step),\n          (previousNewFiber = step));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildFibersImpl(\n    returnFiber,\n    currentFirstChild,\n    newChild,\n    lanes\n  ) {\n    \"object\" === typeof newChild &&\n      null !== newChild &&\n      newChild.type === REACT_FRAGMENT_TYPE &&\n      null === newChild.key &&\n      (newChild = newChild.props.children);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          a: {\n            for (var key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key) {\n                key = newChild.type;\n                if (key === REACT_FRAGMENT_TYPE) {\n                  if (7 === currentFirstChild.tag) {\n                    deleteRemainingChildren(\n                      returnFiber,\n                      currentFirstChild.sibling\n                    );\n                    lanes = useFiber(\n                      currentFirstChild,\n                      newChild.props.children\n                    );\n                    lanes.return = returnFiber;\n                    returnFiber = lanes;\n                    break a;\n                  }\n                } else if (\n                  currentFirstChild.elementType === key ||\n                  (\"object\" === typeof key &&\n                    null !== key &&\n                    key.$$typeof === REACT_LAZY_TYPE &&\n                    resolveLazy(key) === currentFirstChild.type)\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.props);\n                  coerceRef(lanes, newChild);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                }\n                deleteRemainingChildren(returnFiber, currentFirstChild);\n                break;\n              } else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            newChild.type === REACT_FRAGMENT_TYPE\n              ? ((lanes = createFiberFromFragment(\n                  newChild.props.children,\n                  returnFiber.mode,\n                  lanes,\n                  newChild.key\n                )),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes))\n              : ((lanes = createFiberFromTypeAndProps(\n                  newChild.type,\n                  newChild.key,\n                  newChild.props,\n                  null,\n                  returnFiber.mode,\n                  lanes\n                )),\n                coerceRef(lanes, newChild),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes));\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_PORTAL_TYPE:\n          a: {\n            for (key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key)\n                if (\n                  4 === currentFirstChild.tag &&\n                  currentFirstChild.stateNode.containerInfo ===\n                    newChild.containerInfo &&\n                  currentFirstChild.stateNode.implementation ===\n                    newChild.implementation\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.children || []);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                } else {\n                  deleteRemainingChildren(returnFiber, currentFirstChild);\n                  break;\n                }\n              else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n            lanes.return = returnFiber;\n            returnFiber = lanes;\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_LAZY_TYPE:\n          return (\n            (key = newChild._init),\n            (newChild = key(newChild._payload)),\n            reconcileChildFibersImpl(\n              returnFiber,\n              currentFirstChild,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild))\n        return reconcileChildrenArray(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      if (getIteratorFn(newChild)) {\n        key = getIteratorFn(newChild);\n        if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n        newChild = key.call(newChild);\n        return reconcileChildrenIterator(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      }\n      if (\"function\" === typeof newChild.then)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n      ? ((newChild = \"\" + newChild),\n        null !== currentFirstChild && 6 === currentFirstChild.tag\n          ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n            (lanes = useFiber(currentFirstChild, newChild)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes))\n          : (deleteRemainingChildren(returnFiber, currentFirstChild),\n            (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes)),\n        placeSingleChild(returnFiber))\n      : deleteRemainingChildren(returnFiber, currentFirstChild);\n  }\n  return function (returnFiber, currentFirstChild, newChild, lanes) {\n    try {\n      thenableIndexCounter = 0;\n      var firstChildFiber = reconcileChildFibersImpl(\n        returnFiber,\n        currentFirstChild,\n        newChild,\n        lanes\n      );\n      thenableState = null;\n      return firstChildFiber;\n    } catch (x) {\n      if (x === SuspenseException || x === SuspenseActionException) throw x;\n      var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n      fiber.lanes = lanes;\n      fiber.return = returnFiber;\n      return fiber;\n    } finally {\n    }\n  };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n  mountChildFibers = createChildReconciler(!1),\n  suspenseHandlerStackCursor = createCursor(null),\n  shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n  var current = handler.alternate;\n  push(suspenseStackCursor, suspenseStackCursor.current & 1);\n  push(suspenseHandlerStackCursor, handler);\n  null === shellBoundary &&\n    (null === current || null !== currentTreeHiddenStackCursor.current\n      ? (shellBoundary = handler)\n      : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n  if (22 === fiber.tag) {\n    if (\n      (push(suspenseStackCursor, suspenseStackCursor.current),\n      push(suspenseHandlerStackCursor, fiber),\n      null === shellBoundary)\n    ) {\n      var current = fiber.alternate;\n      null !== current &&\n        null !== current.memoizedState &&\n        (shellBoundary = fiber);\n    }\n  } else reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n  pop(suspenseHandlerStackCursor);\n  shellBoundary === fiber && (shellBoundary = null);\n  pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n  for (var node = row; null !== node; ) {\n    if (13 === node.tag) {\n      var state = node.memoizedState;\n      if (\n        null !== state &&\n        ((state = state.dehydrated),\n        null === state ||\n          \"$?\" === state.data ||\n          isSuspenseInstanceFallback(state))\n      )\n        return node;\n    } else if (19 === node.tag && void 0 !== node.memoizedProps.revealOrder) {\n      if (0 !== (node.flags & 128)) return node;\n    } else if (null !== node.child) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n    if (node === row) break;\n    for (; null === node.sibling; ) {\n      if (null === node.return || node.return === row) return null;\n      node = node.return;\n    }\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n  return null;\n}\nfunction applyDerivedStateFromProps(\n  workInProgress,\n  ctor,\n  getDerivedStateFromProps,\n  nextProps\n) {\n  ctor = workInProgress.memoizedState;\n  getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n  getDerivedStateFromProps =\n    null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n      ? ctor\n      : assign({}, ctor, getDerivedStateFromProps);\n  workInProgress.memoizedState = getDerivedStateFromProps;\n  0 === workInProgress.lanes &&\n    (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n  enqueueSetState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 1;\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 2;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    callback = enqueueUpdate(inst, update, lane);\n    null !== callback &&\n      (scheduleUpdateOnFiber(callback, inst, lane),\n      entangleTransitions(callback, inst, lane));\n  }\n};\nfunction checkShouldComponentUpdate(\n  workInProgress,\n  ctor,\n  oldProps,\n  newProps,\n  oldState,\n  newState,\n  nextContext\n) {\n  workInProgress = workInProgress.stateNode;\n  return \"function\" === typeof workInProgress.shouldComponentUpdate\n    ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n    : ctor.prototype && ctor.prototype.isPureReactComponent\n      ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n      : !0;\n}\nfunction callComponentWillReceiveProps(\n  workInProgress,\n  instance,\n  newProps,\n  nextContext\n) {\n  workInProgress = instance.state;\n  \"function\" === typeof instance.componentWillReceiveProps &&\n    instance.componentWillReceiveProps(newProps, nextContext);\n  \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n  instance.state !== workInProgress &&\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n  var newProps = baseProps;\n  if (\"ref\" in baseProps) {\n    newProps = {};\n    for (var propName in baseProps)\n      \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n  }\n  if ((Component = Component.defaultProps)) {\n    newProps === baseProps && (newProps = assign({}, newProps));\n    for (var propName$73 in Component)\n      void 0 === newProps[propName$73] &&\n        (newProps[propName$73] = Component[propName$73]);\n  }\n  return newProps;\n}\nvar reportGlobalError =\n  \"function\" === typeof reportError\n    ? reportError\n    : function (error) {\n        if (\n          \"object\" === typeof window &&\n          \"function\" === typeof window.ErrorEvent\n        ) {\n          var event = new window.ErrorEvent(\"error\", {\n            bubbles: !0,\n            cancelable: !0,\n            message:\n              \"object\" === typeof error &&\n              null !== error &&\n              \"string\" === typeof error.message\n                ? String(error.message)\n                : String(error),\n            error: error\n          });\n          if (!window.dispatchEvent(event)) return;\n        } else if (\n          \"object\" === typeof process &&\n          \"function\" === typeof process.emit\n        ) {\n          process.emit(\"uncaughtException\", error);\n          return;\n        }\n        console.error(error);\n      };\nfunction defaultOnUncaughtError(error) {\n  reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n  console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n  reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n  try {\n    var onUncaughtError = root.onUncaughtError;\n    onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n  } catch (e$74) {\n    setTimeout(function () {\n      throw e$74;\n    });\n  }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n  try {\n    var onCaughtError = root.onCaughtError;\n    onCaughtError(errorInfo.value, {\n      componentStack: errorInfo.stack,\n      errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n    });\n  } catch (e$75) {\n    setTimeout(function () {\n      throw e$75;\n    });\n  }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  lane.payload = { element: null };\n  lane.callback = function () {\n    logUncaughtError(root, errorInfo);\n  };\n  return lane;\n}\nfunction createClassErrorUpdate(lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n  if (\"function\" === typeof getDerivedStateFromError) {\n    var error = errorInfo.value;\n    update.payload = function () {\n      return getDerivedStateFromError(error);\n    };\n    update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n    };\n  }\n  var inst = fiber.stateNode;\n  null !== inst &&\n    \"function\" === typeof inst.componentDidCatch &&\n    (update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n      \"function\" !== typeof getDerivedStateFromError &&\n        (null === legacyErrorBoundariesThatAlreadyFailed\n          ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n          : legacyErrorBoundariesThatAlreadyFailed.add(this));\n      var stack = errorInfo.stack;\n      this.componentDidCatch(errorInfo.value, {\n        componentStack: null !== stack ? stack : \"\"\n      });\n    });\n}\nfunction throwException(\n  root,\n  returnFiber,\n  sourceFiber,\n  value,\n  rootRenderLanes\n) {\n  sourceFiber.flags |= 32768;\n  if (\n    null !== value &&\n    \"object\" === typeof value &&\n    \"function\" === typeof value.then\n  ) {\n    returnFiber = sourceFiber.alternate;\n    null !== returnFiber &&\n      propagateParentContextChanges(\n        returnFiber,\n        sourceFiber,\n        rootRenderLanes,\n        !0\n      );\n    sourceFiber = suspenseHandlerStackCursor.current;\n    if (null !== sourceFiber) {\n      switch (sourceFiber.tag) {\n        case 13:\n          return (\n            null === shellBoundary\n              ? renderDidSuspendDelayIfPossible()\n              : null === sourceFiber.alternate &&\n                0 === workInProgressRootExitStatus &&\n                (workInProgressRootExitStatus = 3),\n            (sourceFiber.flags &= -257),\n            (sourceFiber.flags |= 65536),\n            (sourceFiber.lanes = rootRenderLanes),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? (sourceFiber.updateQueue = new Set([value]))\n                  : returnFiber.add(value),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n        case 22:\n          return (\n            (sourceFiber.flags |= 65536),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? ((returnFiber = {\n                      transitions: null,\n                      markerInstances: null,\n                      retryQueue: new Set([value])\n                    }),\n                    (sourceFiber.updateQueue = returnFiber))\n                  : ((sourceFiber = returnFiber.retryQueue),\n                    null === sourceFiber\n                      ? (returnFiber.retryQueue = new Set([value]))\n                      : sourceFiber.add(value)),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n      }\n      throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n    }\n    attachPingListener(root, value, rootRenderLanes);\n    renderDidSuspendDelayIfPossible();\n    return !1;\n  }\n  if (isHydrating)\n    return (\n      (returnFiber = suspenseHandlerStackCursor.current),\n      null !== returnFiber\n        ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n          (returnFiber.flags |= 65536),\n          (returnFiber.lanes = rootRenderLanes),\n          value !== HydrationMismatchException &&\n            ((root = Error(formatProdErrorMessage(422), { cause: value })),\n            queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n        : (value !== HydrationMismatchException &&\n            ((returnFiber = Error(formatProdErrorMessage(423), {\n              cause: value\n            })),\n            queueHydrationError(\n              createCapturedValueAtFiber(returnFiber, sourceFiber)\n            )),\n          (root = root.current.alternate),\n          (root.flags |= 65536),\n          (rootRenderLanes &= -rootRenderLanes),\n          (root.lanes |= rootRenderLanes),\n          (value = createCapturedValueAtFiber(value, sourceFiber)),\n          (rootRenderLanes = createRootErrorUpdate(\n            root.stateNode,\n            value,\n            rootRenderLanes\n          )),\n          enqueueCapturedUpdate(root, rootRenderLanes),\n          4 !== workInProgressRootExitStatus &&\n            (workInProgressRootExitStatus = 2)),\n      !1\n    );\n  var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n  wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n  null === workInProgressRootConcurrentErrors\n    ? (workInProgressRootConcurrentErrors = [wrapperError])\n    : workInProgressRootConcurrentErrors.push(wrapperError);\n  4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n  if (null === returnFiber) return !0;\n  value = createCapturedValueAtFiber(value, sourceFiber);\n  sourceFiber = returnFiber;\n  do {\n    switch (sourceFiber.tag) {\n      case 3:\n        return (\n          (sourceFiber.flags |= 65536),\n          (root = rootRenderLanes & -rootRenderLanes),\n          (sourceFiber.lanes |= root),\n          (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n          enqueueCapturedUpdate(sourceFiber, root),\n          !1\n        );\n      case 1:\n        if (\n          ((returnFiber = sourceFiber.type),\n          (wrapperError = sourceFiber.stateNode),\n          0 === (sourceFiber.flags & 128) &&\n            (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n              (null !== wrapperError &&\n                \"function\" === typeof wrapperError.componentDidCatch &&\n                (null === legacyErrorBoundariesThatAlreadyFailed ||\n                  !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n        )\n          return (\n            (sourceFiber.flags |= 65536),\n            (rootRenderLanes &= -rootRenderLanes),\n            (sourceFiber.lanes |= rootRenderLanes),\n            (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n            initializeClassErrorUpdate(\n              rootRenderLanes,\n              root,\n              sourceFiber,\n              value\n            ),\n            enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n            !1\n          );\n    }\n    sourceFiber = sourceFiber.return;\n  } while (null !== sourceFiber);\n  return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n  didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n  workInProgress.child =\n    null === current\n      ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n      : reconcileChildFibers(\n          workInProgress,\n          current.child,\n          nextChildren,\n          renderLanes\n        );\n}\nfunction updateForwardRef(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  Component = Component.render;\n  var ref = workInProgress.ref;\n  if (\"ref\" in nextProps) {\n    var propsWithoutRef = {};\n    for (var key in nextProps)\n      \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n  } else propsWithoutRef = nextProps;\n  prepareToReadContext(workInProgress);\n  nextProps = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    propsWithoutRef,\n    ref,\n    renderLanes\n  );\n  key = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && key && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null === current) {\n    var type = Component.type;\n    if (\n      \"function\" === typeof type &&\n      !shouldConstruct(type) &&\n      void 0 === type.defaultProps &&\n      null === Component.compare\n    )\n      return (\n        (workInProgress.tag = 15),\n        (workInProgress.type = type),\n        updateSimpleMemoComponent(\n          current,\n          workInProgress,\n          type,\n          nextProps,\n          renderLanes\n        )\n      );\n    current = createFiberFromTypeAndProps(\n      Component.type,\n      null,\n      nextProps,\n      workInProgress,\n      workInProgress.mode,\n      renderLanes\n    );\n    current.ref = workInProgress.ref;\n    current.return = workInProgress;\n    return (workInProgress.child = current);\n  }\n  type = current.child;\n  if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n    var prevProps = type.memoizedProps;\n    Component = Component.compare;\n    Component = null !== Component ? Component : shallowEqual;\n    if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n  }\n  workInProgress.flags |= 1;\n  current = createWorkInProgress(type, nextProps);\n  current.ref = workInProgress.ref;\n  current.return = workInProgress;\n  return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null !== current) {\n    var prevProps = current.memoizedProps;\n    if (\n      shallowEqual(prevProps, nextProps) &&\n      current.ref === workInProgress.ref\n    )\n      if (\n        ((didReceiveUpdate = !1),\n        (workInProgress.pendingProps = nextProps = prevProps),\n        checkScheduledUpdateOrContext(current, renderLanes))\n      )\n        0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n      else\n        return (\n          (workInProgress.lanes = current.lanes),\n          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n        );\n  }\n  return updateFunctionComponent(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    renderLanes\n  );\n}\nfunction updateOffscreenComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    nextChildren = nextProps.children,\n    prevState = null !== current ? current.memoizedState : null;\n  if (\"hidden\" === nextProps.mode) {\n    if (0 !== (workInProgress.flags & 128)) {\n      nextProps =\n        null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n      if (null !== current) {\n        nextChildren = workInProgress.child = current.child;\n        for (prevState = 0; null !== nextChildren; )\n          (prevState =\n            prevState | nextChildren.lanes | nextChildren.childLanes),\n            (nextChildren = nextChildren.sibling);\n        workInProgress.childLanes = prevState & ~nextProps;\n      } else (workInProgress.childLanes = 0), (workInProgress.child = null);\n      return deferHiddenOffscreenComponent(\n        current,\n        workInProgress,\n        nextProps,\n        renderLanes\n      );\n    }\n    if (0 !== (renderLanes & 536870912))\n      (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n        null !== current &&\n          pushTransition(\n            workInProgress,\n            null !== prevState ? prevState.cachePool : null\n          ),\n        null !== prevState\n          ? pushHiddenContext(workInProgress, prevState)\n          : reuseHiddenContextOnStack(),\n        pushOffscreenSuspenseHandler(workInProgress);\n    else\n      return (\n        (workInProgress.lanes = workInProgress.childLanes = 536870912),\n        deferHiddenOffscreenComponent(\n          current,\n          workInProgress,\n          null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n          renderLanes\n        )\n      );\n  } else\n    null !== prevState\n      ? (pushTransition(workInProgress, prevState.cachePool),\n        pushHiddenContext(workInProgress, prevState),\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (workInProgress.memoizedState = null))\n      : (null !== current && pushTransition(workInProgress, null),\n        reuseHiddenContextOnStack(),\n        reuseSuspenseHandlerOnStack(workInProgress));\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nfunction deferHiddenOffscreenComponent(\n  current,\n  workInProgress,\n  nextBaseLanes,\n  renderLanes\n) {\n  var JSCompiler_inline_result = peekCacheFromPool();\n  JSCompiler_inline_result =\n    null === JSCompiler_inline_result\n      ? null\n      : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n  workInProgress.memoizedState = {\n    baseLanes: nextBaseLanes,\n    cachePool: JSCompiler_inline_result\n  };\n  null !== current && pushTransition(workInProgress, null);\n  reuseHiddenContextOnStack();\n  pushOffscreenSuspenseHandler(workInProgress);\n  null !== current &&\n    propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n  return null;\n}\nfunction markRef(current, workInProgress) {\n  var ref = workInProgress.ref;\n  if (null === ref)\n    null !== current &&\n      null !== current.ref &&\n      (workInProgress.flags |= 4194816);\n  else {\n    if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n      throw Error(formatProdErrorMessage(284));\n    if (null === current || current.ref !== ref)\n      workInProgress.flags |= 4194816;\n  }\n}\nfunction updateFunctionComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  Component = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    void 0,\n    renderLanes\n  );\n  nextProps = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, Component, renderLanes);\n  return workInProgress.child;\n}\nfunction replayFunctionComponent(\n  current,\n  workInProgress,\n  nextProps,\n  Component,\n  secondArg,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  workInProgress.updateQueue = null;\n  nextProps = renderWithHooksAgain(\n    workInProgress,\n    Component,\n    nextProps,\n    secondArg\n  );\n  finishRenderingHooks(current);\n  Component = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && Component && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateClassComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  if (null === workInProgress.stateNode) {\n    var context = emptyContextObject,\n      contextType = Component.contextType;\n    \"object\" === typeof contextType &&\n      null !== contextType &&\n      (context = readContext(contextType));\n    context = new Component(nextProps, context);\n    workInProgress.memoizedState =\n      null !== context.state && void 0 !== context.state ? context.state : null;\n    context.updater = classComponentUpdater;\n    workInProgress.stateNode = context;\n    context._reactInternals = workInProgress;\n    context = workInProgress.stateNode;\n    context.props = nextProps;\n    context.state = workInProgress.memoizedState;\n    context.refs = {};\n    initializeUpdateQueue(workInProgress);\n    contextType = Component.contextType;\n    context.context =\n      \"object\" === typeof contextType && null !== contextType\n        ? readContext(contextType)\n        : emptyContextObject;\n    context.state = workInProgress.memoizedState;\n    contextType = Component.getDerivedStateFromProps;\n    \"function\" === typeof contextType &&\n      (applyDerivedStateFromProps(\n        workInProgress,\n        Component,\n        contextType,\n        nextProps\n      ),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof Component.getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate ||\n      (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n        \"function\" !== typeof context.componentWillMount) ||\n      ((contextType = context.state),\n      \"function\" === typeof context.componentWillMount &&\n        context.componentWillMount(),\n      \"function\" === typeof context.UNSAFE_componentWillMount &&\n        context.UNSAFE_componentWillMount(),\n      contextType !== context.state &&\n        classComponentUpdater.enqueueReplaceState(context, context.state, null),\n      processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n      suspendIfUpdateReadFromEntangledAsyncAction(),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof context.componentDidMount &&\n      (workInProgress.flags |= 4194308);\n    nextProps = !0;\n  } else if (null === current) {\n    context = workInProgress.stateNode;\n    var unresolvedOldProps = workInProgress.memoizedProps,\n      oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n    context.props = oldProps;\n    var oldContext = context.context,\n      contextType$jscomp$0 = Component.contextType;\n    contextType = emptyContextObject;\n    \"object\" === typeof contextType$jscomp$0 &&\n      null !== contextType$jscomp$0 &&\n      (contextType = readContext(contextType$jscomp$0));\n    var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n    contextType$jscomp$0 =\n      \"function\" === typeof getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate;\n    unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n    contextType$jscomp$0 ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((unresolvedOldProps || oldContext !== contextType) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          contextType\n        ));\n    hasForceUpdate = !1;\n    var oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    oldContext = workInProgress.memoizedState;\n    unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n      ? (\"function\" === typeof getDerivedStateFromProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            getDerivedStateFromProps,\n            nextProps\n          ),\n          (oldContext = workInProgress.memoizedState)),\n        (oldProps =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            oldProps,\n            nextProps,\n            oldState,\n            oldContext,\n            contextType\n          ))\n          ? (contextType$jscomp$0 ||\n              (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n                \"function\" !== typeof context.componentWillMount) ||\n              (\"function\" === typeof context.componentWillMount &&\n                context.componentWillMount(),\n              \"function\" === typeof context.UNSAFE_componentWillMount &&\n                context.UNSAFE_componentWillMount()),\n            \"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308))\n          : (\"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = oldContext)),\n        (context.props = nextProps),\n        (context.state = oldContext),\n        (context.context = contextType),\n        (nextProps = oldProps))\n      : (\"function\" === typeof context.componentDidMount &&\n          (workInProgress.flags |= 4194308),\n        (nextProps = !1));\n  } else {\n    context = workInProgress.stateNode;\n    cloneUpdateQueue(current, workInProgress);\n    contextType = workInProgress.memoizedProps;\n    contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n    context.props = contextType$jscomp$0;\n    getDerivedStateFromProps = workInProgress.pendingProps;\n    oldState = context.context;\n    oldContext = Component.contextType;\n    oldProps = emptyContextObject;\n    \"object\" === typeof oldContext &&\n      null !== oldContext &&\n      (oldProps = readContext(oldContext));\n    unresolvedOldProps = Component.getDerivedStateFromProps;\n    (oldContext =\n      \"function\" === typeof unresolvedOldProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          oldProps\n        ));\n    hasForceUpdate = !1;\n    oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    var newState = workInProgress.memoizedState;\n    contextType !== getDerivedStateFromProps ||\n    oldState !== newState ||\n    hasForceUpdate ||\n    (null !== current &&\n      null !== current.dependencies &&\n      checkIfContextChanged(current.dependencies))\n      ? (\"function\" === typeof unresolvedOldProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            unresolvedOldProps,\n            nextProps\n          ),\n          (newState = workInProgress.memoizedState)),\n        (contextType$jscomp$0 =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            contextType$jscomp$0,\n            nextProps,\n            oldState,\n            newState,\n            oldProps\n          ) ||\n          (null !== current &&\n            null !== current.dependencies &&\n            checkIfContextChanged(current.dependencies)))\n          ? (oldContext ||\n              (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n                \"function\" !== typeof context.componentWillUpdate) ||\n              (\"function\" === typeof context.componentWillUpdate &&\n                context.componentWillUpdate(nextProps, newState, oldProps),\n              \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n                context.UNSAFE_componentWillUpdate(\n                  nextProps,\n                  newState,\n                  oldProps\n                )),\n            \"function\" === typeof context.componentDidUpdate &&\n              (workInProgress.flags |= 4),\n            \"function\" === typeof context.getSnapshotBeforeUpdate &&\n              (workInProgress.flags |= 1024))\n          : (\"function\" !== typeof context.componentDidUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 4),\n            \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 1024),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = newState)),\n        (context.props = nextProps),\n        (context.state = newState),\n        (context.context = oldProps),\n        (nextProps = contextType$jscomp$0))\n      : (\"function\" !== typeof context.componentDidUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 4),\n        \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 1024),\n        (nextProps = !1));\n  }\n  context = nextProps;\n  markRef(current, workInProgress);\n  nextProps = 0 !== (workInProgress.flags & 128);\n  context || nextProps\n    ? ((context = workInProgress.stateNode),\n      (Component =\n        nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n          ? null\n          : context.render()),\n      (workInProgress.flags |= 1),\n      null !== current && nextProps\n        ? ((workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            current.child,\n            null,\n            renderLanes\n          )),\n          (workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            null,\n            Component,\n            renderLanes\n          )))\n        : reconcileChildren(current, workInProgress, Component, renderLanes),\n      (workInProgress.memoizedState = context.state),\n      (current = workInProgress.child))\n    : (current = bailoutOnAlreadyFinishedWork(\n        current,\n        workInProgress,\n        renderLanes\n      ));\n  return current;\n}\nfunction mountHostRootWithoutHydrating(\n  current,\n  workInProgress,\n  nextChildren,\n  renderLanes\n) {\n  resetHydrationState();\n  workInProgress.flags |= 256;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n  dehydrated: null,\n  treeContext: null,\n  retryLane: 0,\n  hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n  return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n  current,\n  primaryTreeDidDefer,\n  renderLanes\n) {\n  current = null !== current ? current.childLanes & ~renderLanes : 0;\n  primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n  return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    showFallback = !1,\n    didSuspend = 0 !== (workInProgress.flags & 128),\n    JSCompiler_temp;\n  (JSCompiler_temp = didSuspend) ||\n    (JSCompiler_temp =\n      null !== current && null === current.memoizedState\n        ? !1\n        : 0 !== (suspenseStackCursor.current & 2));\n  JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n  JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n  workInProgress.flags &= -33;\n  if (null === current) {\n    if (isHydrating) {\n      showFallback\n        ? pushPrimaryTreeSuspenseHandler(workInProgress)\n        : reuseSuspenseHandlerOnStack(workInProgress);\n      if (isHydrating) {\n        var nextInstance = nextHydratableInstance,\n          JSCompiler_temp$jscomp$0;\n        if ((JSCompiler_temp$jscomp$0 = nextInstance)) {\n          c: {\n            JSCompiler_temp$jscomp$0 = nextInstance;\n            for (\n              nextInstance = rootOrSingletonContext;\n              8 !== JSCompiler_temp$jscomp$0.nodeType;\n\n            ) {\n              if (!nextInstance) {\n                nextInstance = null;\n                break c;\n              }\n              JSCompiler_temp$jscomp$0 = getNextHydratable(\n                JSCompiler_temp$jscomp$0.nextSibling\n              );\n              if (null === JSCompiler_temp$jscomp$0) {\n                nextInstance = null;\n                break c;\n              }\n            }\n            nextInstance = JSCompiler_temp$jscomp$0;\n          }\n          null !== nextInstance\n            ? ((workInProgress.memoizedState = {\n                dehydrated: nextInstance,\n                treeContext:\n                  null !== treeContextProvider\n                    ? { id: treeContextId, overflow: treeContextOverflow }\n                    : null,\n                retryLane: 536870912,\n                hydrationErrors: null\n              }),\n              (JSCompiler_temp$jscomp$0 = createFiberImplClass(\n                18,\n                null,\n                null,\n                0\n              )),\n              (JSCompiler_temp$jscomp$0.stateNode = nextInstance),\n              (JSCompiler_temp$jscomp$0.return = workInProgress),\n              (workInProgress.child = JSCompiler_temp$jscomp$0),\n              (hydrationParentFiber = workInProgress),\n              (nextHydratableInstance = null),\n              (JSCompiler_temp$jscomp$0 = !0))\n            : (JSCompiler_temp$jscomp$0 = !1);\n        }\n        JSCompiler_temp$jscomp$0 || throwOnHydrationMismatch(workInProgress);\n      }\n      nextInstance = workInProgress.memoizedState;\n      if (\n        null !== nextInstance &&\n        ((nextInstance = nextInstance.dehydrated), null !== nextInstance)\n      )\n        return (\n          isSuspenseInstanceFallback(nextInstance)\n            ? (workInProgress.lanes = 32)\n            : (workInProgress.lanes = 536870912),\n          null\n        );\n      popSuspenseHandler(workInProgress);\n    }\n    nextInstance = nextProps.children;\n    nextProps = nextProps.fallback;\n    if (showFallback)\n      return (\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (showFallback = workInProgress.mode),\n        (nextInstance = mountWorkInProgressOffscreenFiber(\n          { mode: \"hidden\", children: nextInstance },\n          showFallback\n        )),\n        (nextProps = createFiberFromFragment(\n          nextProps,\n          showFallback,\n          renderLanes,\n          null\n        )),\n        (nextInstance.return = workInProgress),\n        (nextProps.return = workInProgress),\n        (nextInstance.sibling = nextProps),\n        (workInProgress.child = nextInstance),\n        (showFallback = workInProgress.child),\n        (showFallback.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n        (showFallback.childLanes = getRemainingWorkInPrimaryTree(\n          current,\n          JSCompiler_temp,\n          renderLanes\n        )),\n        (workInProgress.memoizedState = SUSPENDED_MARKER),\n        nextProps\n      );\n    pushPrimaryTreeSuspenseHandler(workInProgress);\n    return mountSuspensePrimaryChildren(workInProgress, nextInstance);\n  }\n  JSCompiler_temp$jscomp$0 = current.memoizedState;\n  if (\n    null !== JSCompiler_temp$jscomp$0 &&\n    ((nextInstance = JSCompiler_temp$jscomp$0.dehydrated),\n    null !== nextInstance)\n  ) {\n    if (didSuspend)\n      workInProgress.flags & 256\n        ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n          (workInProgress.flags &= -257),\n          (workInProgress = retrySuspenseComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          )))\n        : null !== workInProgress.memoizedState\n          ? (reuseSuspenseHandlerOnStack(workInProgress),\n            (workInProgress.child = current.child),\n            (workInProgress.flags |= 128),\n            (workInProgress = null))\n          : (reuseSuspenseHandlerOnStack(workInProgress),\n            (showFallback = nextProps.fallback),\n            (nextInstance = workInProgress.mode),\n            (nextProps = mountWorkInProgressOffscreenFiber(\n              { mode: \"visible\", children: nextProps.children },\n              nextInstance\n            )),\n            (showFallback = createFiberFromFragment(\n              showFallback,\n              nextInstance,\n              renderLanes,\n              null\n            )),\n            (showFallback.flags |= 2),\n            (nextProps.return = workInProgress),\n            (showFallback.return = workInProgress),\n            (nextProps.sibling = showFallback),\n            (workInProgress.child = nextProps),\n            reconcileChildFibers(\n              workInProgress,\n              current.child,\n              null,\n              renderLanes\n            ),\n            (nextProps = workInProgress.child),\n            (nextProps.memoizedState =\n              mountSuspenseOffscreenState(renderLanes)),\n            (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n              current,\n              JSCompiler_temp,\n              renderLanes\n            )),\n            (workInProgress.memoizedState = SUSPENDED_MARKER),\n            (workInProgress = showFallback));\n    else if (\n      (pushPrimaryTreeSuspenseHandler(workInProgress),\n      isSuspenseInstanceFallback(nextInstance))\n    ) {\n      JSCompiler_temp =\n        nextInstance.nextSibling && nextInstance.nextSibling.dataset;\n      if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n      JSCompiler_temp = digest;\n      nextProps = Error(formatProdErrorMessage(419));\n      nextProps.stack = \"\";\n      nextProps.digest = JSCompiler_temp;\n      queueHydrationError({ value: nextProps, source: null, stack: null });\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || JSCompiler_temp)\n    ) {\n      JSCompiler_temp = workInProgressRoot;\n      if (\n        null !== JSCompiler_temp &&\n        ((nextProps = renderLanes & -renderLanes),\n        (nextProps =\n          0 !== (nextProps & 42)\n            ? 1\n            : getBumpedLaneForHydrationByLane(nextProps)),\n        (nextProps =\n          0 !== (nextProps & (JSCompiler_temp.suspendedLanes | renderLanes))\n            ? 0\n            : nextProps),\n        0 !== nextProps && nextProps !== JSCompiler_temp$jscomp$0.retryLane)\n      )\n        throw (\n          ((JSCompiler_temp$jscomp$0.retryLane = nextProps),\n          enqueueConcurrentRenderForLane(current, nextProps),\n          scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n          SelectiveHydrationException)\n        );\n      \"$?\" === nextInstance.data || renderDidSuspendDelayIfPossible();\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      \"$?\" === nextInstance.data\n        ? ((workInProgress.flags |= 192),\n          (workInProgress.child = current.child),\n          (workInProgress = null))\n        : ((current = JSCompiler_temp$jscomp$0.treeContext),\n          (nextHydratableInstance = getNextHydratable(\n            nextInstance.nextSibling\n          )),\n          (hydrationParentFiber = workInProgress),\n          (isHydrating = !0),\n          (hydrationErrors = null),\n          (rootOrSingletonContext = !1),\n          null !== current &&\n            ((idStack[idStackIndex++] = treeContextId),\n            (idStack[idStackIndex++] = treeContextOverflow),\n            (idStack[idStackIndex++] = treeContextProvider),\n            (treeContextId = current.id),\n            (treeContextOverflow = current.overflow),\n            (treeContextProvider = workInProgress)),\n          (workInProgress = mountSuspensePrimaryChildren(\n            workInProgress,\n            nextProps.children\n          )),\n          (workInProgress.flags |= 4096));\n    return workInProgress;\n  }\n  if (showFallback)\n    return (\n      reuseSuspenseHandlerOnStack(workInProgress),\n      (showFallback = nextProps.fallback),\n      (nextInstance = workInProgress.mode),\n      (JSCompiler_temp$jscomp$0 = current.child),\n      (digest = JSCompiler_temp$jscomp$0.sibling),\n      (nextProps = createWorkInProgress(JSCompiler_temp$jscomp$0, {\n        mode: \"hidden\",\n        children: nextProps.children\n      })),\n      (nextProps.subtreeFlags =\n        JSCompiler_temp$jscomp$0.subtreeFlags & 65011712),\n      null !== digest\n        ? (showFallback = createWorkInProgress(digest, showFallback))\n        : ((showFallback = createFiberFromFragment(\n            showFallback,\n            nextInstance,\n            renderLanes,\n            null\n          )),\n          (showFallback.flags |= 2)),\n      (showFallback.return = workInProgress),\n      (nextProps.return = workInProgress),\n      (nextProps.sibling = showFallback),\n      (workInProgress.child = nextProps),\n      (nextProps = showFallback),\n      (showFallback = workInProgress.child),\n      (nextInstance = current.child.memoizedState),\n      null === nextInstance\n        ? (nextInstance = mountSuspenseOffscreenState(renderLanes))\n        : ((JSCompiler_temp$jscomp$0 = nextInstance.cachePool),\n          null !== JSCompiler_temp$jscomp$0\n            ? ((digest = CacheContext._currentValue),\n              (JSCompiler_temp$jscomp$0 =\n                JSCompiler_temp$jscomp$0.parent !== digest\n                  ? { parent: digest, pool: digest }\n                  : JSCompiler_temp$jscomp$0))\n            : (JSCompiler_temp$jscomp$0 = getSuspendedCache()),\n          (nextInstance = {\n            baseLanes: nextInstance.baseLanes | renderLanes,\n            cachePool: JSCompiler_temp$jscomp$0\n          })),\n      (showFallback.memoizedState = nextInstance),\n      (showFallback.childLanes = getRemainingWorkInPrimaryTree(\n        current,\n        JSCompiler_temp,\n        renderLanes\n      )),\n      (workInProgress.memoizedState = SUSPENDED_MARKER),\n      nextProps\n    );\n  pushPrimaryTreeSuspenseHandler(workInProgress);\n  renderLanes = current.child;\n  current = renderLanes.sibling;\n  renderLanes = createWorkInProgress(renderLanes, {\n    mode: \"visible\",\n    children: nextProps.children\n  });\n  renderLanes.return = workInProgress;\n  renderLanes.sibling = null;\n  null !== current &&\n    ((JSCompiler_temp = workInProgress.deletions),\n    null === JSCompiler_temp\n      ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n      : JSCompiler_temp.push(current));\n  workInProgress.child = renderLanes;\n  workInProgress.memoizedState = null;\n  return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n  primaryChildren = mountWorkInProgressOffscreenFiber(\n    { mode: \"visible\", children: primaryChildren },\n    workInProgress.mode\n  );\n  primaryChildren.return = workInProgress;\n  return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n  offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n  offscreenProps.lanes = 0;\n  offscreenProps.stateNode = {\n    _visibility: 1,\n    _pendingMarkers: null,\n    _retryCache: null,\n    _transitions: null\n  };\n  return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountSuspensePrimaryChildren(\n    workInProgress,\n    workInProgress.pendingProps.children\n  );\n  current.flags |= 2;\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n  fiber.lanes |= renderLanes;\n  var alternate = fiber.alternate;\n  null !== alternate && (alternate.lanes |= renderLanes);\n  scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n  workInProgress,\n  isBackwards,\n  tail,\n  lastContentRow,\n  tailMode\n) {\n  var renderState = workInProgress.memoizedState;\n  null === renderState\n    ? (workInProgress.memoizedState = {\n        isBackwards: isBackwards,\n        rendering: null,\n        renderingStartTime: 0,\n        last: lastContentRow,\n        tail: tail,\n        tailMode: tailMode\n      })\n    : ((renderState.isBackwards = isBackwards),\n      (renderState.rendering = null),\n      (renderState.renderingStartTime = 0),\n      (renderState.last = lastContentRow),\n      (renderState.tail = tail),\n      (renderState.tailMode = tailMode));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    revealOrder = nextProps.revealOrder,\n    tailMode = nextProps.tail;\n  reconcileChildren(current, workInProgress, nextProps.children, renderLanes);\n  nextProps = suspenseStackCursor.current;\n  if (0 !== (nextProps & 2))\n    (nextProps = (nextProps & 1) | 2), (workInProgress.flags |= 128);\n  else {\n    if (null !== current && 0 !== (current.flags & 128))\n      a: for (current = workInProgress.child; null !== current; ) {\n        if (13 === current.tag)\n          null !== current.memoizedState &&\n            scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n        else if (19 === current.tag)\n          scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n        else if (null !== current.child) {\n          current.child.return = current;\n          current = current.child;\n          continue;\n        }\n        if (current === workInProgress) break a;\n        for (; null === current.sibling; ) {\n          if (null === current.return || current.return === workInProgress)\n            break a;\n          current = current.return;\n        }\n        current.sibling.return = current.return;\n        current = current.sibling;\n      }\n    nextProps &= 1;\n  }\n  push(suspenseStackCursor, nextProps);\n  switch (revealOrder) {\n    case \"forwards\":\n      renderLanes = workInProgress.child;\n      for (revealOrder = null; null !== renderLanes; )\n        (current = renderLanes.alternate),\n          null !== current &&\n            null === findFirstSuspended(current) &&\n            (revealOrder = renderLanes),\n          (renderLanes = renderLanes.sibling);\n      renderLanes = revealOrder;\n      null === renderLanes\n        ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n        : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        revealOrder,\n        renderLanes,\n        tailMode\n      );\n      break;\n    case \"backwards\":\n      renderLanes = null;\n      revealOrder = workInProgress.child;\n      for (workInProgress.child = null; null !== revealOrder; ) {\n        current = revealOrder.alternate;\n        if (null !== current && null === findFirstSuspended(current)) {\n          workInProgress.child = revealOrder;\n          break;\n        }\n        current = revealOrder.sibling;\n        revealOrder.sibling = renderLanes;\n        renderLanes = revealOrder;\n        revealOrder = current;\n      }\n      initSuspenseListRenderState(\n        workInProgress,\n        !0,\n        renderLanes,\n        null,\n        tailMode\n      );\n      break;\n    case \"together\":\n      initSuspenseListRenderState(workInProgress, !1, null, null, void 0);\n      break;\n    default:\n      workInProgress.memoizedState = null;\n  }\n  return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n  null !== current && (workInProgress.dependencies = current.dependencies);\n  workInProgressRootSkippedLanes |= workInProgress.lanes;\n  if (0 === (renderLanes & workInProgress.childLanes))\n    if (null !== current) {\n      if (\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        0 === (renderLanes & workInProgress.childLanes))\n      )\n        return null;\n    } else return null;\n  if (null !== current && workInProgress.child !== current.child)\n    throw Error(formatProdErrorMessage(153));\n  if (null !== workInProgress.child) {\n    current = workInProgress.child;\n    renderLanes = createWorkInProgress(current, current.pendingProps);\n    workInProgress.child = renderLanes;\n    for (renderLanes.return = workInProgress; null !== current.sibling; )\n      (current = current.sibling),\n        (renderLanes = renderLanes.sibling =\n          createWorkInProgress(current, current.pendingProps)),\n        (renderLanes.return = workInProgress);\n    renderLanes.sibling = null;\n  }\n  return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n  if (0 !== (current.lanes & renderLanes)) return !0;\n  current = current.dependencies;\n  return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  switch (workInProgress.tag) {\n    case 3:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n      resetHydrationState();\n      break;\n    case 27:\n    case 5:\n      pushHostContext(workInProgress);\n      break;\n    case 4:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      break;\n    case 10:\n      pushProvider(\n        workInProgress,\n        workInProgress.type,\n        workInProgress.memoizedProps.value\n      );\n      break;\n    case 13:\n      var state = workInProgress.memoizedState;\n      if (null !== state) {\n        if (null !== state.dehydrated)\n          return (\n            pushPrimaryTreeSuspenseHandler(workInProgress),\n            (workInProgress.flags |= 128),\n            null\n          );\n        if (0 !== (renderLanes & workInProgress.child.childLanes))\n          return updateSuspenseComponent(current, workInProgress, renderLanes);\n        pushPrimaryTreeSuspenseHandler(workInProgress);\n        current = bailoutOnAlreadyFinishedWork(\n          current,\n          workInProgress,\n          renderLanes\n        );\n        return null !== current ? current.sibling : null;\n      }\n      pushPrimaryTreeSuspenseHandler(workInProgress);\n      break;\n    case 19:\n      var didSuspendBefore = 0 !== (current.flags & 128);\n      state = 0 !== (renderLanes & workInProgress.childLanes);\n      state ||\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        (state = 0 !== (renderLanes & workInProgress.childLanes)));\n      if (didSuspendBefore) {\n        if (state)\n          return updateSuspenseListComponent(\n            current,\n            workInProgress,\n            renderLanes\n          );\n        workInProgress.flags |= 128;\n      }\n      didSuspendBefore = workInProgress.memoizedState;\n      null !== didSuspendBefore &&\n        ((didSuspendBefore.rendering = null),\n        (didSuspendBefore.tail = null),\n        (didSuspendBefore.lastEffect = null));\n      push(suspenseStackCursor, suspenseStackCursor.current);\n      if (state) break;\n      else return null;\n    case 22:\n    case 23:\n      return (\n        (workInProgress.lanes = 0),\n        updateOffscreenComponent(current, workInProgress, renderLanes)\n      );\n    case 24:\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n  }\n  return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n  if (null !== current)\n    if (current.memoizedProps !== workInProgress.pendingProps)\n      didReceiveUpdate = !0;\n    else {\n      if (\n        !checkScheduledUpdateOrContext(current, renderLanes) &&\n        0 === (workInProgress.flags & 128)\n      )\n        return (\n          (didReceiveUpdate = !1),\n          attemptEarlyBailoutIfNoScheduledUpdate(\n            current,\n            workInProgress,\n            renderLanes\n          )\n        );\n      didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n    }\n  else\n    (didReceiveUpdate = !1),\n      isHydrating &&\n        0 !== (workInProgress.flags & 1048576) &&\n        pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n  workInProgress.lanes = 0;\n  switch (workInProgress.tag) {\n    case 16:\n      a: {\n        current = workInProgress.pendingProps;\n        var lazyComponent = workInProgress.elementType,\n          init = lazyComponent._init;\n        lazyComponent = init(lazyComponent._payload);\n        workInProgress.type = lazyComponent;\n        if (\"function\" === typeof lazyComponent)\n          shouldConstruct(lazyComponent)\n            ? ((current = resolveClassComponentProps(lazyComponent, current)),\n              (workInProgress.tag = 1),\n              (workInProgress = updateClassComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              )))\n            : ((workInProgress.tag = 0),\n              (workInProgress = updateFunctionComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              )));\n        else {\n          if (void 0 !== lazyComponent && null !== lazyComponent)\n            if (\n              ((init = lazyComponent.$$typeof), init === REACT_FORWARD_REF_TYPE)\n            ) {\n              workInProgress.tag = 11;\n              workInProgress = updateForwardRef(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              );\n              break a;\n            } else if (init === REACT_MEMO_TYPE) {\n              workInProgress.tag = 14;\n              workInProgress = updateMemoComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              );\n              break a;\n            }\n          workInProgress =\n            getComponentNameFromType(lazyComponent) || lazyComponent;\n          throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n        }\n      }\n      return workInProgress;\n    case 0:\n      return updateFunctionComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 1:\n      return (\n        (lazyComponent = workInProgress.type),\n        (init = resolveClassComponentProps(\n          lazyComponent,\n          workInProgress.pendingProps\n        )),\n        updateClassComponent(\n          current,\n          workInProgress,\n          lazyComponent,\n          init,\n          renderLanes\n        )\n      );\n    case 3:\n      a: {\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        );\n        if (null === current) throw Error(formatProdErrorMessage(387));\n        lazyComponent = workInProgress.pendingProps;\n        var prevState = workInProgress.memoizedState;\n        init = prevState.element;\n        cloneUpdateQueue(current, workInProgress);\n        processUpdateQueue(workInProgress, lazyComponent, null, renderLanes);\n        var nextState = workInProgress.memoizedState;\n        lazyComponent = nextState.cache;\n        pushProvider(workInProgress, CacheContext, lazyComponent);\n        lazyComponent !== prevState.cache &&\n          propagateContextChanges(\n            workInProgress,\n            [CacheContext],\n            renderLanes,\n            !0\n          );\n        suspendIfUpdateReadFromEntangledAsyncAction();\n        lazyComponent = nextState.element;\n        if (prevState.isDehydrated)\n          if (\n            ((prevState = {\n              element: lazyComponent,\n              isDehydrated: !1,\n              cache: nextState.cache\n            }),\n            (workInProgress.updateQueue.baseState = prevState),\n            (workInProgress.memoizedState = prevState),\n            workInProgress.flags & 256)\n          ) {\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            );\n            break a;\n          } else if (lazyComponent !== init) {\n            init = createCapturedValueAtFiber(\n              Error(formatProdErrorMessage(424)),\n              workInProgress\n            );\n            queueHydrationError(init);\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            );\n            break a;\n          } else {\n            current = workInProgress.stateNode.containerInfo;\n            switch (current.nodeType) {\n              case 9:\n                current = current.body;\n                break;\n              default:\n                current =\n                  \"HTML\" === current.nodeName\n                    ? current.ownerDocument.body\n                    : current;\n            }\n            nextHydratableInstance = getNextHydratable(current.firstChild);\n            hydrationParentFiber = workInProgress;\n            isHydrating = !0;\n            hydrationErrors = null;\n            rootOrSingletonContext = !0;\n            renderLanes = mountChildFibers(\n              workInProgress,\n              null,\n              lazyComponent,\n              renderLanes\n            );\n            for (workInProgress.child = renderLanes; renderLanes; )\n              (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n                (renderLanes = renderLanes.sibling);\n          }\n        else {\n          resetHydrationState();\n          if (lazyComponent === init) {\n            workInProgress = bailoutOnAlreadyFinishedWork(\n              current,\n              workInProgress,\n              renderLanes\n            );\n            break a;\n          }\n          reconcileChildren(\n            current,\n            workInProgress,\n            lazyComponent,\n            renderLanes\n          );\n        }\n        workInProgress = workInProgress.child;\n      }\n      return workInProgress;\n    case 26:\n      return (\n        markRef(current, workInProgress),\n        null === current\n          ? (renderLanes = getResource(\n              workInProgress.type,\n              null,\n              workInProgress.pendingProps,\n              null\n            ))\n            ? (workInProgress.memoizedState = renderLanes)\n            : isHydrating ||\n              ((renderLanes = workInProgress.type),\n              (current = workInProgress.pendingProps),\n              (lazyComponent = getOwnerDocumentFromRootContainer(\n                rootInstanceStackCursor.current\n              ).createElement(renderLanes)),\n              (lazyComponent[internalInstanceKey] = workInProgress),\n              (lazyComponent[internalPropsKey] = current),\n              setInitialProperties(lazyComponent, renderLanes, current),\n              markNodeAsHoistable(lazyComponent),\n              (workInProgress.stateNode = lazyComponent))\n          : (workInProgress.memoizedState = getResource(\n              workInProgress.type,\n              current.memoizedProps,\n              workInProgress.pendingProps,\n              current.memoizedState\n            )),\n        null\n      );\n    case 27:\n      return (\n        pushHostContext(workInProgress),\n        null === current &&\n          isHydrating &&\n          ((lazyComponent = workInProgress.stateNode =\n            resolveSingletonInstance(\n              workInProgress.type,\n              workInProgress.pendingProps,\n              rootInstanceStackCursor.current\n            )),\n          (hydrationParentFiber = workInProgress),\n          (rootOrSingletonContext = !0),\n          (init = nextHydratableInstance),\n          isSingletonScope(workInProgress.type)\n            ? ((previousHydratableOnEnteringScopedSingleton = init),\n              (nextHydratableInstance = getNextHydratable(\n                lazyComponent.firstChild\n              )))\n            : (nextHydratableInstance = init)),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        markRef(current, workInProgress),\n        null === current && (workInProgress.flags |= 4194304),\n        workInProgress.child\n      );\n    case 5:\n      if (null === current && isHydrating) {\n        if ((init = lazyComponent = nextHydratableInstance))\n          (lazyComponent = canHydrateInstance(\n            lazyComponent,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== lazyComponent\n              ? ((workInProgress.stateNode = lazyComponent),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = getNextHydratable(\n                  lazyComponent.firstChild\n                )),\n                (rootOrSingletonContext = !1),\n                (init = !0))\n              : (init = !1);\n        init || throwOnHydrationMismatch(workInProgress);\n      }\n      pushHostContext(workInProgress);\n      init = workInProgress.type;\n      prevState = workInProgress.pendingProps;\n      nextState = null !== current ? current.memoizedProps : null;\n      lazyComponent = prevState.children;\n      shouldSetTextContent(init, prevState)\n        ? (lazyComponent = null)\n        : null !== nextState &&\n          shouldSetTextContent(init, nextState) &&\n          (workInProgress.flags |= 32);\n      null !== workInProgress.memoizedState &&\n        ((init = renderWithHooks(\n          current,\n          workInProgress,\n          TransitionAwareHostComponent,\n          null,\n          null,\n          renderLanes\n        )),\n        (HostTransitionContext._currentValue = init));\n      markRef(current, workInProgress);\n      reconcileChildren(current, workInProgress, lazyComponent, renderLanes);\n      return workInProgress.child;\n    case 6:\n      if (null === current && isHydrating) {\n        if ((current = renderLanes = nextHydratableInstance))\n          (renderLanes = canHydrateTextInstance(\n            renderLanes,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== renderLanes\n              ? ((workInProgress.stateNode = renderLanes),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = null),\n                (current = !0))\n              : (current = !1);\n        current || throwOnHydrationMismatch(workInProgress);\n      }\n      return null;\n    case 13:\n      return updateSuspenseComponent(current, workInProgress, renderLanes);\n    case 4:\n      return (\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        ),\n        (lazyComponent = workInProgress.pendingProps),\n        null === current\n          ? (workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              null,\n              lazyComponent,\n              renderLanes\n            ))\n          : reconcileChildren(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            ),\n        workInProgress.child\n      );\n    case 11:\n      return updateForwardRef(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 7:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 8:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 12:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 10:\n      return (\n        (lazyComponent = workInProgress.pendingProps),\n        pushProvider(workInProgress, workInProgress.type, lazyComponent.value),\n        reconcileChildren(\n          current,\n          workInProgress,\n          lazyComponent.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 9:\n      return (\n        (init = workInProgress.type._context),\n        (lazyComponent = workInProgress.pendingProps.children),\n        prepareToReadContext(workInProgress),\n        (init = readContext(init)),\n        (lazyComponent = lazyComponent(init)),\n        (workInProgress.flags |= 1),\n        reconcileChildren(current, workInProgress, lazyComponent, renderLanes),\n        workInProgress.child\n      );\n    case 14:\n      return updateMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 15:\n      return updateSimpleMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 19:\n      return updateSuspenseListComponent(current, workInProgress, renderLanes);\n    case 31:\n      return (\n        (lazyComponent = workInProgress.pendingProps),\n        (renderLanes = workInProgress.mode),\n        (lazyComponent = {\n          mode: lazyComponent.mode,\n          children: lazyComponent.children\n        }),\n        null === current\n          ? ((renderLanes = mountWorkInProgressOffscreenFiber(\n              lazyComponent,\n              renderLanes\n            )),\n            (renderLanes.ref = workInProgress.ref),\n            (workInProgress.child = renderLanes),\n            (renderLanes.return = workInProgress),\n            (workInProgress = renderLanes))\n          : ((renderLanes = createWorkInProgress(current.child, lazyComponent)),\n            (renderLanes.ref = workInProgress.ref),\n            (workInProgress.child = renderLanes),\n            (renderLanes.return = workInProgress),\n            (workInProgress = renderLanes)),\n        workInProgress\n      );\n    case 22:\n      return updateOffscreenComponent(current, workInProgress, renderLanes);\n    case 24:\n      return (\n        prepareToReadContext(workInProgress),\n        (lazyComponent = readContext(CacheContext)),\n        null === current\n          ? ((init = peekCacheFromPool()),\n            null === init &&\n              ((init = workInProgressRoot),\n              (prevState = createCache()),\n              (init.pooledCache = prevState),\n              prevState.refCount++,\n              null !== prevState && (init.pooledCacheLanes |= renderLanes),\n              (init = prevState)),\n            (workInProgress.memoizedState = {\n              parent: lazyComponent,\n              cache: init\n            }),\n            initializeUpdateQueue(workInProgress),\n            pushProvider(workInProgress, CacheContext, init))\n          : (0 !== (current.lanes & renderLanes) &&\n              (cloneUpdateQueue(current, workInProgress),\n              processUpdateQueue(workInProgress, null, null, renderLanes),\n              suspendIfUpdateReadFromEntangledAsyncAction()),\n            (init = current.memoizedState),\n            (prevState = workInProgress.memoizedState),\n            init.parent !== lazyComponent\n              ? ((init = { parent: lazyComponent, cache: lazyComponent }),\n                (workInProgress.memoizedState = init),\n                0 === workInProgress.lanes &&\n                  (workInProgress.memoizedState =\n                    workInProgress.updateQueue.baseState =\n                      init),\n                pushProvider(workInProgress, CacheContext, lazyComponent))\n              : ((lazyComponent = prevState.cache),\n                pushProvider(workInProgress, CacheContext, lazyComponent),\n                lazyComponent !== init.cache &&\n                  propagateContextChanges(\n                    workInProgress,\n                    [CacheContext],\n                    renderLanes,\n                    !0\n                  ))),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 29:\n      throw workInProgress.pendingProps;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n  workInProgress.flags |= 4;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n  if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n    workInProgress.flags &= -16777217;\n  else if (((workInProgress.flags |= 16777216), !preloadResource(resource))) {\n    resource = suspenseHandlerStackCursor.current;\n    if (\n      null !== resource &&\n      ((workInProgressRootRenderLanes & 4194048) ===\n      workInProgressRootRenderLanes\n        ? null !== shellBoundary\n        : ((workInProgressRootRenderLanes & 62914560) !==\n            workInProgressRootRenderLanes &&\n            0 === (workInProgressRootRenderLanes & 536870912)) ||\n          resource !== shellBoundary)\n    )\n      throw (\n        ((suspendedThenable = noopSuspenseyCommitThenable),\n        SuspenseyCommitException)\n      );\n    workInProgress.flags |= 8192;\n  }\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n  null !== retryQueue && (workInProgress.flags |= 4);\n  workInProgress.flags & 16384 &&\n    ((retryQueue =\n      22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n    (workInProgress.lanes |= retryQueue),\n    (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n  if (!isHydrating)\n    switch (renderState.tailMode) {\n      case \"hidden\":\n        hasRenderedATailFallback = renderState.tail;\n        for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n          null !== hasRenderedATailFallback.alternate &&\n            (lastTailNode = hasRenderedATailFallback),\n            (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n        null === lastTailNode\n          ? (renderState.tail = null)\n          : (lastTailNode.sibling = null);\n        break;\n      case \"collapsed\":\n        lastTailNode = renderState.tail;\n        for (var lastTailNode$113 = null; null !== lastTailNode; )\n          null !== lastTailNode.alternate && (lastTailNode$113 = lastTailNode),\n            (lastTailNode = lastTailNode.sibling);\n        null === lastTailNode$113\n          ? hasRenderedATailFallback || null === renderState.tail\n            ? (renderState.tail = null)\n            : (renderState.tail.sibling = null)\n          : (lastTailNode$113.sibling = null);\n    }\n}\nfunction bubbleProperties(completedWork) {\n  var didBailout =\n      null !== completedWork.alternate &&\n      completedWork.alternate.child === completedWork.child,\n    newChildLanes = 0,\n    subtreeFlags = 0;\n  if (didBailout)\n    for (var child$114 = completedWork.child; null !== child$114; )\n      (newChildLanes |= child$114.lanes | child$114.childLanes),\n        (subtreeFlags |= child$114.subtreeFlags & 65011712),\n        (subtreeFlags |= child$114.flags & 65011712),\n        (child$114.return = completedWork),\n        (child$114 = child$114.sibling);\n  else\n    for (child$114 = completedWork.child; null !== child$114; )\n      (newChildLanes |= child$114.lanes | child$114.childLanes),\n        (subtreeFlags |= child$114.subtreeFlags),\n        (subtreeFlags |= child$114.flags),\n        (child$114.return = completedWork),\n        (child$114 = child$114.sibling);\n  completedWork.subtreeFlags |= subtreeFlags;\n  completedWork.childLanes = newChildLanes;\n  return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n  var newProps = workInProgress.pendingProps;\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 31:\n    case 16:\n    case 15:\n    case 0:\n    case 11:\n    case 7:\n    case 8:\n    case 12:\n    case 9:\n    case 14:\n      return bubbleProperties(workInProgress), null;\n    case 1:\n      return bubbleProperties(workInProgress), null;\n    case 3:\n      renderLanes = workInProgress.stateNode;\n      newProps = null;\n      null !== current && (newProps = current.memoizedState.cache);\n      workInProgress.memoizedState.cache !== newProps &&\n        (workInProgress.flags |= 2048);\n      popProvider(CacheContext);\n      popHostContainer();\n      renderLanes.pendingContext &&\n        ((renderLanes.context = renderLanes.pendingContext),\n        (renderLanes.pendingContext = null));\n      if (null === current || null === current.child)\n        popHydrationState(workInProgress)\n          ? markUpdate(workInProgress)\n          : null === current ||\n            (current.memoizedState.isDehydrated &&\n              0 === (workInProgress.flags & 256)) ||\n            ((workInProgress.flags |= 1024),\n            upgradeHydrationErrorsToRecoverable());\n      bubbleProperties(workInProgress);\n      return null;\n    case 26:\n      return (\n        (renderLanes = workInProgress.memoizedState),\n        null === current\n          ? (markUpdate(workInProgress),\n            null !== renderLanes\n              ? (bubbleProperties(workInProgress),\n                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))\n              : (bubbleProperties(workInProgress),\n                (workInProgress.flags &= -16777217)))\n          : renderLanes\n            ? renderLanes !== current.memoizedState\n              ? (markUpdate(workInProgress),\n                bubbleProperties(workInProgress),\n                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))\n              : (bubbleProperties(workInProgress),\n                (workInProgress.flags &= -16777217))\n            : (current.memoizedProps !== newProps && markUpdate(workInProgress),\n              bubbleProperties(workInProgress),\n              (workInProgress.flags &= -16777217)),\n        null\n      );\n    case 27:\n      popHostContext(workInProgress);\n      renderLanes = rootInstanceStackCursor.current;\n      var type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        popHydrationState(workInProgress)\n          ? prepareToHydrateHostInstance(workInProgress, current)\n          : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n            (workInProgress.stateNode = current),\n            markUpdate(workInProgress));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 5:\n      popHostContext(workInProgress);\n      renderLanes = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        if (popHydrationState(workInProgress))\n          prepareToHydrateHostInstance(workInProgress, current);\n        else {\n          type = getOwnerDocumentFromRootContainer(\n            rootInstanceStackCursor.current\n          );\n          switch (current) {\n            case 1:\n              current = type.createElementNS(\n                \"http://www.w3.org/2000/svg\",\n                renderLanes\n              );\n              break;\n            case 2:\n              current = type.createElementNS(\n                \"http://www.w3.org/1998/Math/MathML\",\n                renderLanes\n              );\n              break;\n            default:\n              switch (renderLanes) {\n                case \"svg\":\n                  current = type.createElementNS(\n                    \"http://www.w3.org/2000/svg\",\n                    renderLanes\n                  );\n                  break;\n                case \"math\":\n                  current = type.createElementNS(\n                    \"http://www.w3.org/1998/Math/MathML\",\n                    renderLanes\n                  );\n                  break;\n                case \"script\":\n                  current = type.createElement(\"div\");\n                  current.innerHTML = \"<script>\\x3c/script>\";\n                  current = current.removeChild(current.firstChild);\n                  break;\n                case \"select\":\n                  current =\n                    \"string\" === typeof newProps.is\n                      ? type.createElement(\"select\", { is: newProps.is })\n                      : type.createElement(\"select\");\n                  newProps.multiple\n                    ? (current.multiple = !0)\n                    : newProps.size && (current.size = newProps.size);\n                  break;\n                default:\n                  current =\n                    \"string\" === typeof newProps.is\n                      ? type.createElement(renderLanes, { is: newProps.is })\n                      : type.createElement(renderLanes);\n              }\n          }\n          current[internalInstanceKey] = workInProgress;\n          current[internalPropsKey] = newProps;\n          a: for (type = workInProgress.child; null !== type; ) {\n            if (5 === type.tag || 6 === type.tag)\n              current.appendChild(type.stateNode);\n            else if (4 !== type.tag && 27 !== type.tag && null !== type.child) {\n              type.child.return = type;\n              type = type.child;\n              continue;\n            }\n            if (type === workInProgress) break a;\n            for (; null === type.sibling; ) {\n              if (null === type.return || type.return === workInProgress)\n                break a;\n              type = type.return;\n            }\n            type.sibling.return = type.return;\n            type = type.sibling;\n          }\n          workInProgress.stateNode = current;\n          a: switch (\n            (setInitialProperties(current, renderLanes, newProps), renderLanes)\n          ) {\n            case \"button\":\n            case \"input\":\n            case \"select\":\n            case \"textarea\":\n              current = !!newProps.autoFocus;\n              break a;\n            case \"img\":\n              current = !0;\n              break a;\n            default:\n              current = !1;\n          }\n          current && markUpdate(workInProgress);\n        }\n      }\n      bubbleProperties(workInProgress);\n      workInProgress.flags &= -16777217;\n      return null;\n    case 6:\n      if (current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n          throw Error(formatProdErrorMessage(166));\n        current = rootInstanceStackCursor.current;\n        if (popHydrationState(workInProgress)) {\n          current = workInProgress.stateNode;\n          renderLanes = workInProgress.memoizedProps;\n          newProps = null;\n          type = hydrationParentFiber;\n          if (null !== type)\n            switch (type.tag) {\n              case 27:\n              case 5:\n                newProps = type.memoizedProps;\n            }\n          current[internalInstanceKey] = workInProgress;\n          current =\n            current.nodeValue === renderLanes ||\n            (null !== newProps && !0 === newProps.suppressHydrationWarning) ||\n            checkForUnmatchedText(current.nodeValue, renderLanes)\n              ? !0\n              : !1;\n          current || throwOnHydrationMismatch(workInProgress);\n        } else\n          (current =\n            getOwnerDocumentFromRootContainer(current).createTextNode(\n              newProps\n            )),\n            (current[internalInstanceKey] = workInProgress),\n            (workInProgress.stateNode = current);\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 13:\n      newProps = workInProgress.memoizedState;\n      if (\n        null === current ||\n        (null !== current.memoizedState &&\n          null !== current.memoizedState.dehydrated)\n      ) {\n        type = popHydrationState(workInProgress);\n        if (null !== newProps && null !== newProps.dehydrated) {\n          if (null === current) {\n            if (!type) throw Error(formatProdErrorMessage(318));\n            type = workInProgress.memoizedState;\n            type = null !== type ? type.dehydrated : null;\n            if (!type) throw Error(formatProdErrorMessage(317));\n            type[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          type = !1;\n        } else\n          (type = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = type),\n            (type = !0);\n        if (!type) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n      }\n      popSuspenseHandler(workInProgress);\n      if (0 !== (workInProgress.flags & 128))\n        return (workInProgress.lanes = renderLanes), workInProgress;\n      renderLanes = null !== newProps;\n      current = null !== current && null !== current.memoizedState;\n      if (renderLanes) {\n        newProps = workInProgress.child;\n        type = null;\n        null !== newProps.alternate &&\n          null !== newProps.alternate.memoizedState &&\n          null !== newProps.alternate.memoizedState.cachePool &&\n          (type = newProps.alternate.memoizedState.cachePool.pool);\n        var cache$127 = null;\n        null !== newProps.memoizedState &&\n          null !== newProps.memoizedState.cachePool &&\n          (cache$127 = newProps.memoizedState.cachePool.pool);\n        cache$127 !== type && (newProps.flags |= 2048);\n      }\n      renderLanes !== current &&\n        renderLanes &&\n        (workInProgress.child.flags |= 8192);\n      scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n      bubbleProperties(workInProgress);\n      return null;\n    case 4:\n      return (\n        popHostContainer(),\n        null === current &&\n          listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 10:\n      return (\n        popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n      );\n    case 19:\n      pop(suspenseStackCursor);\n      type = workInProgress.memoizedState;\n      if (null === type) return bubbleProperties(workInProgress), null;\n      newProps = 0 !== (workInProgress.flags & 128);\n      cache$127 = type.rendering;\n      if (null === cache$127)\n        if (newProps) cutOffTailIfNeeded(type, !1);\n        else {\n          if (\n            0 !== workInProgressRootExitStatus ||\n            (null !== current && 0 !== (current.flags & 128))\n          )\n            for (current = workInProgress.child; null !== current; ) {\n              cache$127 = findFirstSuspended(current);\n              if (null !== cache$127) {\n                workInProgress.flags |= 128;\n                cutOffTailIfNeeded(type, !1);\n                current = cache$127.updateQueue;\n                workInProgress.updateQueue = current;\n                scheduleRetryEffect(workInProgress, current);\n                workInProgress.subtreeFlags = 0;\n                current = renderLanes;\n                for (renderLanes = workInProgress.child; null !== renderLanes; )\n                  resetWorkInProgress(renderLanes, current),\n                    (renderLanes = renderLanes.sibling);\n                push(\n                  suspenseStackCursor,\n                  (suspenseStackCursor.current & 1) | 2\n                );\n                return workInProgress.child;\n              }\n              current = current.sibling;\n            }\n          null !== type.tail &&\n            now() > workInProgressRootRenderTargetTime &&\n            ((workInProgress.flags |= 128),\n            (newProps = !0),\n            cutOffTailIfNeeded(type, !1),\n            (workInProgress.lanes = 4194304));\n        }\n      else {\n        if (!newProps)\n          if (((current = findFirstSuspended(cache$127)), null !== current)) {\n            if (\n              ((workInProgress.flags |= 128),\n              (newProps = !0),\n              (current = current.updateQueue),\n              (workInProgress.updateQueue = current),\n              scheduleRetryEffect(workInProgress, current),\n              cutOffTailIfNeeded(type, !0),\n              null === type.tail &&\n                \"hidden\" === type.tailMode &&\n                !cache$127.alternate &&\n                !isHydrating)\n            )\n              return bubbleProperties(workInProgress), null;\n          } else\n            2 * now() - type.renderingStartTime >\n              workInProgressRootRenderTargetTime &&\n              536870912 !== renderLanes &&\n              ((workInProgress.flags |= 128),\n              (newProps = !0),\n              cutOffTailIfNeeded(type, !1),\n              (workInProgress.lanes = 4194304));\n        type.isBackwards\n          ? ((cache$127.sibling = workInProgress.child),\n            (workInProgress.child = cache$127))\n          : ((current = type.last),\n            null !== current\n              ? (current.sibling = cache$127)\n              : (workInProgress.child = cache$127),\n            (type.last = cache$127));\n      }\n      if (null !== type.tail)\n        return (\n          (workInProgress = type.tail),\n          (type.rendering = workInProgress),\n          (type.tail = workInProgress.sibling),\n          (type.renderingStartTime = now()),\n          (workInProgress.sibling = null),\n          (current = suspenseStackCursor.current),\n          push(suspenseStackCursor, newProps ? (current & 1) | 2 : current & 1),\n          workInProgress\n        );\n      bubbleProperties(workInProgress);\n      return null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        (newProps = null !== workInProgress.memoizedState),\n        null !== current\n          ? (null !== current.memoizedState) !== newProps &&\n            (workInProgress.flags |= 8192)\n          : newProps && (workInProgress.flags |= 8192),\n        newProps\n          ? 0 !== (renderLanes & 536870912) &&\n            0 === (workInProgress.flags & 128) &&\n            (bubbleProperties(workInProgress),\n            workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))\n          : bubbleProperties(workInProgress),\n        (renderLanes = workInProgress.updateQueue),\n        null !== renderLanes &&\n          scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n        (renderLanes = null),\n        null !== current &&\n          null !== current.memoizedState &&\n          null !== current.memoizedState.cachePool &&\n          (renderLanes = current.memoizedState.cachePool.pool),\n        (newProps = null),\n        null !== workInProgress.memoizedState &&\n          null !== workInProgress.memoizedState.cachePool &&\n          (newProps = workInProgress.memoizedState.cachePool.pool),\n        newProps !== renderLanes && (workInProgress.flags |= 2048),\n        null !== current && pop(resumedCache),\n        null\n      );\n    case 24:\n      return (\n        (renderLanes = null),\n        null !== current && (renderLanes = current.memoizedState.cache),\n        workInProgress.memoizedState.cache !== renderLanes &&\n          (workInProgress.flags |= 2048),\n        popProvider(CacheContext),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 25:\n      return null;\n    case 30:\n      return null;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction unwindWork(current, workInProgress) {\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 1:\n      return (\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 3:\n      return (\n        popProvider(CacheContext),\n        popHostContainer(),\n        (current = workInProgress.flags),\n        0 !== (current & 65536) && 0 === (current & 128)\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 26:\n    case 27:\n    case 5:\n      return popHostContext(workInProgress), null;\n    case 13:\n      popSuspenseHandler(workInProgress);\n      current = workInProgress.memoizedState;\n      if (null !== current && null !== current.dehydrated) {\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 19:\n      return pop(suspenseStackCursor), null;\n    case 4:\n      return popHostContainer(), null;\n    case 10:\n      return popProvider(workInProgress.type), null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        null !== current && pop(resumedCache),\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 24:\n      return popProvider(CacheContext), null;\n    case 25:\n      return null;\n    default:\n      return null;\n  }\n}\nfunction unwindInterruptedWork(current, interruptedWork) {\n  popTreeContext(interruptedWork);\n  switch (interruptedWork.tag) {\n    case 3:\n      popProvider(CacheContext);\n      popHostContainer();\n      break;\n    case 26:\n    case 27:\n    case 5:\n      popHostContext(interruptedWork);\n      break;\n    case 4:\n      popHostContainer();\n      break;\n    case 13:\n      popSuspenseHandler(interruptedWork);\n      break;\n    case 19:\n      pop(suspenseStackCursor);\n      break;\n    case 10:\n      popProvider(interruptedWork.type);\n      break;\n    case 22:\n    case 23:\n      popSuspenseHandler(interruptedWork);\n      popHiddenContext();\n      null !== current && pop(resumedCache);\n      break;\n    case 24:\n      popProvider(CacheContext);\n  }\n}\nfunction commitHookEffectListMount(flags, finishedWork) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          lastEffect = void 0;\n          var create = updateQueue.create,\n            inst = updateQueue.inst;\n          lastEffect = create();\n          inst.destroy = lastEffect;\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHookEffectListUnmount(\n  flags,\n  finishedWork,\n  nearestMountedAncestor$jscomp$0\n) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          var inst = updateQueue.inst,\n            destroy = inst.destroy;\n          if (void 0 !== destroy) {\n            inst.destroy = void 0;\n            lastEffect = finishedWork;\n            var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n              destroy_ = destroy;\n            try {\n              destroy_();\n            } catch (error) {\n              captureCommitPhaseError(\n                lastEffect,\n                nearestMountedAncestor,\n                error\n              );\n            }\n          }\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitClassCallbacks(finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  if (null !== updateQueue) {\n    var instance = finishedWork.stateNode;\n    try {\n      commitCallbacks(updateQueue, instance);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction safelyCallComponentWillUnmount(\n  current,\n  nearestMountedAncestor,\n  instance\n) {\n  instance.props = resolveClassComponentProps(\n    current.type,\n    current.memoizedProps\n  );\n  instance.state = current.memoizedState;\n  try {\n    instance.componentWillUnmount();\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n  try {\n    var ref = current.ref;\n    if (null !== ref) {\n      switch (current.tag) {\n        case 26:\n        case 27:\n        case 5:\n          var instanceToUse = current.stateNode;\n          break;\n        case 30:\n          instanceToUse = current.stateNode;\n          break;\n        default:\n          instanceToUse = current.stateNode;\n      }\n      \"function\" === typeof ref\n        ? (current.refCleanup = ref(instanceToUse))\n        : (ref.current = instanceToUse);\n    }\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n  var ref = current.ref,\n    refCleanup = current.refCleanup;\n  if (null !== ref)\n    if (\"function\" === typeof refCleanup)\n      try {\n        refCleanup();\n      } catch (error) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error);\n      } finally {\n        (current.refCleanup = null),\n          (current = current.alternate),\n          null != current && (current.refCleanup = null);\n      }\n    else if (\"function\" === typeof ref)\n      try {\n        ref(null);\n      } catch (error$143) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error$143);\n      }\n    else ref.current = null;\n}\nfunction commitHostMount(finishedWork) {\n  var type = finishedWork.type,\n    props = finishedWork.memoizedProps,\n    instance = finishedWork.stateNode;\n  try {\n    a: switch (type) {\n      case \"button\":\n      case \"input\":\n      case \"select\":\n      case \"textarea\":\n        props.autoFocus && instance.focus();\n        break a;\n      case \"img\":\n        props.src\n          ? (instance.src = props.src)\n          : props.srcSet && (instance.srcset = props.srcSet);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHostUpdate(finishedWork, newProps, oldProps) {\n  try {\n    var domElement = finishedWork.stateNode;\n    updateProperties(domElement, finishedWork.type, oldProps, newProps);\n    domElement[internalPropsKey] = newProps;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction isHostParent(fiber) {\n  return (\n    5 === fiber.tag ||\n    3 === fiber.tag ||\n    26 === fiber.tag ||\n    (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n    4 === fiber.tag\n  );\n}\nfunction getHostSibling(fiber) {\n  a: for (;;) {\n    for (; null === fiber.sibling; ) {\n      if (null === fiber.return || isHostParent(fiber.return)) return null;\n      fiber = fiber.return;\n    }\n    fiber.sibling.return = fiber.return;\n    for (\n      fiber = fiber.sibling;\n      5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n    ) {\n      if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n      if (fiber.flags & 2) continue a;\n      if (null === fiber.child || 4 === fiber.tag) continue a;\n      else (fiber.child.return = fiber), (fiber = fiber.child);\n    }\n    if (!(fiber.flags & 2)) return fiber.stateNode;\n  }\n}\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before\n        ? (9 === parent.nodeType\n            ? parent.body\n            : \"HTML\" === parent.nodeName\n              ? parent.ownerDocument.body\n              : parent\n          ).insertBefore(node, before)\n        : ((before =\n            9 === parent.nodeType\n              ? parent.body\n              : \"HTML\" === parent.nodeName\n                ? parent.ownerDocument.body\n                : parent),\n          before.appendChild(node),\n          (parent = parent._reactRootContainer),\n          (null !== parent && void 0 !== parent) ||\n            null !== before.onclick ||\n            (before.onclick = noop$1));\n  else if (\n    4 !== tag &&\n    (27 === tag &&\n      isSingletonScope(node.type) &&\n      ((parent = node.stateNode), (before = null)),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before ? parent.insertBefore(node, before) : parent.appendChild(node);\n  else if (\n    4 !== tag &&\n    (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);\n}\nfunction commitHostSingletonAcquisition(finishedWork) {\n  var singleton = finishedWork.stateNode,\n    props = finishedWork.memoizedProps;\n  try {\n    for (\n      var type = finishedWork.type, attributes = singleton.attributes;\n      attributes.length;\n\n    )\n      singleton.removeAttributeNode(attributes[0]);\n    setInitialProperties(singleton, type, props);\n    singleton[internalInstanceKey] = finishedWork;\n    singleton[internalPropsKey] = props;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nvar offscreenSubtreeIsHidden = !1,\n  offscreenSubtreeWasHidden = !1,\n  needsFormReset = !1,\n  PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n  nextEffect = null;\nfunction commitBeforeMutationEffects(root, firstChild) {\n  root = root.containerInfo;\n  eventsEnabled = _enabled;\n  root = getActiveElementDeep(root);\n  if (hasSelectionCapabilities(root)) {\n    if (\"selectionStart\" in root)\n      var JSCompiler_temp = {\n        start: root.selectionStart,\n        end: root.selectionEnd\n      };\n    else\n      a: {\n        JSCompiler_temp =\n          ((JSCompiler_temp = root.ownerDocument) &&\n            JSCompiler_temp.defaultView) ||\n          window;\n        var selection =\n          JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n        if (selection && 0 !== selection.rangeCount) {\n          JSCompiler_temp = selection.anchorNode;\n          var anchorOffset = selection.anchorOffset,\n            focusNode = selection.focusNode;\n          selection = selection.focusOffset;\n          try {\n            JSCompiler_temp.nodeType, focusNode.nodeType;\n          } catch (e$20) {\n            JSCompiler_temp = null;\n            break a;\n          }\n          var length = 0,\n            start = -1,\n            end = -1,\n            indexWithinAnchor = 0,\n            indexWithinFocus = 0,\n            node = root,\n            parentNode = null;\n          b: for (;;) {\n            for (var next; ; ) {\n              node !== JSCompiler_temp ||\n                (0 !== anchorOffset && 3 !== node.nodeType) ||\n                (start = length + anchorOffset);\n              node !== focusNode ||\n                (0 !== selection && 3 !== node.nodeType) ||\n                (end = length + selection);\n              3 === node.nodeType && (length += node.nodeValue.length);\n              if (null === (next = node.firstChild)) break;\n              parentNode = node;\n              node = next;\n            }\n            for (;;) {\n              if (node === root) break b;\n              parentNode === JSCompiler_temp &&\n                ++indexWithinAnchor === anchorOffset &&\n                (start = length);\n              parentNode === focusNode &&\n                ++indexWithinFocus === selection &&\n                (end = length);\n              if (null !== (next = node.nextSibling)) break;\n              node = parentNode;\n              parentNode = node.parentNode;\n            }\n            node = next;\n          }\n          JSCompiler_temp =\n            -1 === start || -1 === end ? null : { start: start, end: end };\n        } else JSCompiler_temp = null;\n      }\n    JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n  } else JSCompiler_temp = null;\n  selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };\n  _enabled = !1;\n  for (nextEffect = firstChild; null !== nextEffect; )\n    if (\n      ((firstChild = nextEffect),\n      (root = firstChild.child),\n      0 !== (firstChild.subtreeFlags & 1024) && null !== root)\n    )\n      (root.return = firstChild), (nextEffect = root);\n    else\n      for (; null !== nextEffect; ) {\n        firstChild = nextEffect;\n        focusNode = firstChild.alternate;\n        root = firstChild.flags;\n        switch (firstChild.tag) {\n          case 0:\n            break;\n          case 11:\n          case 15:\n            break;\n          case 1:\n            if (0 !== (root & 1024) && null !== focusNode) {\n              root = void 0;\n              JSCompiler_temp = firstChild;\n              anchorOffset = focusNode.memoizedProps;\n              focusNode = focusNode.memoizedState;\n              selection = JSCompiler_temp.stateNode;\n              try {\n                var resolvedPrevProps = resolveClassComponentProps(\n                  JSCompiler_temp.type,\n                  anchorOffset,\n                  JSCompiler_temp.elementType === JSCompiler_temp.type\n                );\n                root = selection.getSnapshotBeforeUpdate(\n                  resolvedPrevProps,\n                  focusNode\n                );\n                selection.__reactInternalSnapshotBeforeUpdate = root;\n              } catch (error) {\n                captureCommitPhaseError(\n                  JSCompiler_temp,\n                  JSCompiler_temp.return,\n                  error\n                );\n              }\n            }\n            break;\n          case 3:\n            if (0 !== (root & 1024))\n              if (\n                ((root = firstChild.stateNode.containerInfo),\n                (JSCompiler_temp = root.nodeType),\n                9 === JSCompiler_temp)\n              )\n                clearContainerSparingly(root);\n              else if (1 === JSCompiler_temp)\n                switch (root.nodeName) {\n                  case \"HEAD\":\n                  case \"HTML\":\n                  case \"BODY\":\n                    clearContainerSparingly(root);\n                    break;\n                  default:\n                    root.textContent = \"\";\n                }\n            break;\n          case 5:\n          case 26:\n          case 27:\n          case 6:\n          case 4:\n          case 17:\n            break;\n          default:\n            if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));\n        }\n        root = firstChild.sibling;\n        if (null !== root) {\n          root.return = firstChild.return;\n          nextEffect = root;\n          break;\n        }\n        nextEffect = firstChild.return;\n      }\n}\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitHookEffectListMount(5, finishedWork);\n      break;\n    case 1:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (flags & 4)\n        if (((finishedRoot = finishedWork.stateNode), null === current))\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n        else {\n          var prevProps = resolveClassComponentProps(\n            finishedWork.type,\n            current.memoizedProps\n          );\n          current = current.memoizedState;\n          try {\n            finishedRoot.componentDidUpdate(\n              prevProps,\n              current,\n              finishedRoot.__reactInternalSnapshotBeforeUpdate\n            );\n          } catch (error$142) {\n            captureCommitPhaseError(\n              finishedWork,\n              finishedWork.return,\n              error$142\n            );\n          }\n        }\n      flags & 64 && commitClassCallbacks(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (\n        flags & 64 &&\n        ((finishedRoot = finishedWork.updateQueue), null !== finishedRoot)\n      ) {\n        current = null;\n        if (null !== finishedWork.child)\n          switch (finishedWork.child.tag) {\n            case 27:\n            case 5:\n              current = finishedWork.child.stateNode;\n              break;\n            case 1:\n              current = finishedWork.child.stateNode;\n          }\n        try {\n          commitCallbacks(finishedRoot, current);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 27:\n      null === current &&\n        flags & 4 &&\n        commitHostSingletonAcquisition(finishedWork);\n    case 26:\n    case 5:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      null === current && flags & 4 && commitHostMount(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 12:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n      flags & 64 &&\n        ((finishedRoot = finishedWork.memoizedState),\n        null !== finishedRoot &&\n          ((finishedRoot = finishedRoot.dehydrated),\n          null !== finishedRoot &&\n            ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n              null,\n              finishedWork\n            )),\n            registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n      break;\n    case 22:\n      flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n      if (!flags) {\n        current =\n          (null !== current && null !== current.memoizedState) ||\n          offscreenSubtreeWasHidden;\n        prevProps = offscreenSubtreeIsHidden;\n        var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n        offscreenSubtreeIsHidden = flags;\n        (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden\n          ? recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              0 !== (finishedWork.subtreeFlags & 8772)\n            )\n          : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n        offscreenSubtreeIsHidden = prevProps;\n        offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      }\n      break;\n    case 30:\n      break;\n    default:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n  }\n}\nfunction detachFiberAfterEffects(fiber) {\n  var alternate = fiber.alternate;\n  null !== alternate &&\n    ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n  fiber.child = null;\n  fiber.deletions = null;\n  fiber.sibling = null;\n  5 === fiber.tag &&\n    ((alternate = fiber.stateNode),\n    null !== alternate && detachDeletedInstance(alternate));\n  fiber.stateNode = null;\n  fiber.return = null;\n  fiber.dependencies = null;\n  fiber.memoizedProps = null;\n  fiber.memoizedState = null;\n  fiber.pendingProps = null;\n  fiber.stateNode = null;\n  fiber.updateQueue = null;\n}\nvar hostParent = null,\n  hostParentIsContainer = !1;\nfunction recursivelyTraverseDeletionEffects(\n  finishedRoot,\n  nearestMountedAncestor,\n  parent\n) {\n  for (parent = parent.child; null !== parent; )\n    commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),\n      (parent = parent.sibling);\n}\nfunction commitDeletionEffectsOnFiber(\n  finishedRoot,\n  nearestMountedAncestor,\n  deletedFiber\n) {\n  if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n    try {\n      injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n    } catch (err) {}\n  switch (deletedFiber.tag) {\n    case 26:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      deletedFiber.memoizedState\n        ? deletedFiber.memoizedState.count--\n        : deletedFiber.stateNode &&\n          ((deletedFiber = deletedFiber.stateNode),\n          deletedFiber.parentNode.removeChild(deletedFiber));\n      break;\n    case 27:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      var prevHostParent = hostParent,\n        prevHostParentIsContainer = hostParentIsContainer;\n      isSingletonScope(deletedFiber.type) &&\n        ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      releaseSingletonInstance(deletedFiber.stateNode);\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 5:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n    case 6:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = null;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      if (null !== hostParent)\n        if (hostParentIsContainer)\n          try {\n            (9 === hostParent.nodeType\n              ? hostParent.body\n              : \"HTML\" === hostParent.nodeName\n                ? hostParent.ownerDocument.body\n                : hostParent\n            ).removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n        else\n          try {\n            hostParent.removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n      break;\n    case 18:\n      null !== hostParent &&\n        (hostParentIsContainer\n          ? ((finishedRoot = hostParent),\n            clearSuspenseBoundary(\n              9 === finishedRoot.nodeType\n                ? finishedRoot.body\n                : \"HTML\" === finishedRoot.nodeName\n                  ? finishedRoot.ownerDocument.body\n                  : finishedRoot,\n              deletedFiber.stateNode\n            ),\n            retryIfBlockedOn(finishedRoot))\n          : clearSuspenseBoundary(hostParent, deletedFiber.stateNode));\n      break;\n    case 4:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = deletedFiber.stateNode.containerInfo;\n      hostParentIsContainer = !0;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 1:\n      offscreenSubtreeWasHidden ||\n        (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n        (prevHostParent = deletedFiber.stateNode),\n        \"function\" === typeof prevHostParent.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            deletedFiber,\n            nearestMountedAncestor,\n            prevHostParent\n          ));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 21:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 22:\n      offscreenSubtreeWasHidden =\n        (prevHostParent = offscreenSubtreeWasHidden) ||\n        null !== deletedFiber.memoizedState;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      offscreenSubtreeWasHidden = prevHostParent;\n      break;\n    default:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n  }\n}\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState),\n      null !== finishedRoot &&\n        ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n  )\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n}\nfunction getRetryCache(finishedWork) {\n  switch (finishedWork.tag) {\n    case 13:\n    case 19:\n      var retryCache = finishedWork.stateNode;\n      null === retryCache &&\n        (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n      return retryCache;\n    case 22:\n      return (\n        (finishedWork = finishedWork.stateNode),\n        (retryCache = finishedWork._retryCache),\n        null === retryCache &&\n          (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n        retryCache\n      );\n    default:\n      throw Error(formatProdErrorMessage(435, finishedWork.tag));\n  }\n}\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n  var retryCache = getRetryCache(finishedWork);\n  wakeables.forEach(function (wakeable) {\n    var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n    retryCache.has(wakeable) ||\n      (retryCache.add(wakeable), wakeable.then(retry, retry));\n  });\n}\nfunction recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (null !== deletions)\n    for (var i = 0; i < deletions.length; i++) {\n      var childToDelete = deletions[i],\n        root = root$jscomp$0,\n        returnFiber = parentFiber,\n        parent = returnFiber;\n      a: for (; null !== parent; ) {\n        switch (parent.tag) {\n          case 27:\n            if (isSingletonScope(parent.type)) {\n              hostParent = parent.stateNode;\n              hostParentIsContainer = !1;\n              break a;\n            }\n            break;\n          case 5:\n            hostParent = parent.stateNode;\n            hostParentIsContainer = !1;\n            break a;\n          case 3:\n          case 4:\n            hostParent = parent.stateNode.containerInfo;\n            hostParentIsContainer = !0;\n            break a;\n        }\n        parent = parent.return;\n      }\n      if (null === hostParent) throw Error(formatProdErrorMessage(160));\n      commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);\n      hostParent = null;\n      hostParentIsContainer = !1;\n      root = childToDelete.alternate;\n      null !== root && (root.return = null);\n      childToDelete.return = null;\n    }\n  if (parentFiber.subtreeFlags & 13878)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n        (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root) {\n  var current = finishedWork.alternate,\n    flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),\n        commitHookEffectListMount(3, finishedWork),\n        commitHookEffectListUnmount(5, finishedWork, finishedWork.return));\n      break;\n    case 1:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      flags & 64 &&\n        offscreenSubtreeIsHidden &&\n        ((finishedWork = finishedWork.updateQueue),\n        null !== finishedWork &&\n          ((flags = finishedWork.callbacks),\n          null !== flags &&\n            ((current = finishedWork.shared.hiddenCallbacks),\n            (finishedWork.shared.hiddenCallbacks =\n              null === current ? flags : current.concat(flags)))));\n      break;\n    case 26:\n      var hoistableRoot = currentHoistableRoot;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (flags & 4) {\n        var currentResource = null !== current ? current.memoizedState : null;\n        flags = finishedWork.memoizedState;\n        if (null === current)\n          if (null === flags)\n            if (null === finishedWork.stateNode) {\n              a: {\n                flags = finishedWork.type;\n                current = finishedWork.memoizedProps;\n                hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n                b: switch (flags) {\n                  case \"title\":\n                    currentResource =\n                      hoistableRoot.getElementsByTagName(\"title\")[0];\n                    if (\n                      !currentResource ||\n                      currentResource[internalHoistableMarker] ||\n                      currentResource[internalInstanceKey] ||\n                      \"http://www.w3.org/2000/svg\" ===\n                        currentResource.namespaceURI ||\n                      currentResource.hasAttribute(\"itemprop\")\n                    )\n                      (currentResource = hoistableRoot.createElement(flags)),\n                        hoistableRoot.head.insertBefore(\n                          currentResource,\n                          hoistableRoot.querySelector(\"head > title\")\n                        );\n                    setInitialProperties(currentResource, flags, current);\n                    currentResource[internalInstanceKey] = finishedWork;\n                    markNodeAsHoistable(currentResource);\n                    flags = currentResource;\n                    break a;\n                  case \"link\":\n                    var maybeNodes = getHydratableHoistableCache(\n                      \"link\",\n                      \"href\",\n                      hoistableRoot\n                    ).get(flags + (current.href || \"\"));\n                    if (maybeNodes)\n                      for (var i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"href\") ===\n                            (null == current.href || \"\" === current.href\n                              ? null\n                              : current.href) &&\n                            currentResource.getAttribute(\"rel\") ===\n                              (null == current.rel ? null : current.rel) &&\n                            currentResource.getAttribute(\"title\") ===\n                              (null == current.title ? null : current.title) &&\n                            currentResource.getAttribute(\"crossorigin\") ===\n                              (null == current.crossOrigin\n                                ? null\n                                : current.crossOrigin))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  case \"meta\":\n                    if (\n                      (maybeNodes = getHydratableHoistableCache(\n                        \"meta\",\n                        \"content\",\n                        hoistableRoot\n                      ).get(flags + (current.content || \"\")))\n                    )\n                      for (i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"content\") ===\n                            (null == current.content\n                              ? null\n                              : \"\" + current.content) &&\n                            currentResource.getAttribute(\"name\") ===\n                              (null == current.name ? null : current.name) &&\n                            currentResource.getAttribute(\"property\") ===\n                              (null == current.property\n                                ? null\n                                : current.property) &&\n                            currentResource.getAttribute(\"http-equiv\") ===\n                              (null == current.httpEquiv\n                                ? null\n                                : current.httpEquiv) &&\n                            currentResource.getAttribute(\"charset\") ===\n                              (null == current.charSet\n                                ? null\n                                : current.charSet))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  default:\n                    throw Error(formatProdErrorMessage(468, flags));\n                }\n                currentResource[internalInstanceKey] = finishedWork;\n                markNodeAsHoistable(currentResource);\n                flags = currentResource;\n              }\n              finishedWork.stateNode = flags;\n            } else\n              mountHoistable(\n                hoistableRoot,\n                finishedWork.type,\n                finishedWork.stateNode\n              );\n          else\n            finishedWork.stateNode = acquireResource(\n              hoistableRoot,\n              flags,\n              finishedWork.memoizedProps\n            );\n        else\n          currentResource !== flags\n            ? (null === currentResource\n                ? null !== current.stateNode &&\n                  ((current = current.stateNode),\n                  current.parentNode.removeChild(current))\n                : currentResource.count--,\n              null === flags\n                ? mountHoistable(\n                    hoistableRoot,\n                    finishedWork.type,\n                    finishedWork.stateNode\n                  )\n                : acquireResource(\n                    hoistableRoot,\n                    flags,\n                    finishedWork.memoizedProps\n                  ))\n            : null === flags &&\n              null !== finishedWork.stateNode &&\n              commitHostUpdate(\n                finishedWork,\n                finishedWork.memoizedProps,\n                current.memoizedProps\n              );\n      }\n      break;\n    case 27:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      null !== current &&\n        flags & 4 &&\n        commitHostUpdate(\n          finishedWork,\n          finishedWork.memoizedProps,\n          current.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (finishedWork.flags & 32) {\n        hoistableRoot = finishedWork.stateNode;\n        try {\n          setTextContent(hoistableRoot, \"\");\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      flags & 4 &&\n        null != finishedWork.stateNode &&\n        ((hoistableRoot = finishedWork.memoizedProps),\n        commitHostUpdate(\n          finishedWork,\n          hoistableRoot,\n          null !== current ? current.memoizedProps : hoistableRoot\n        ));\n      flags & 1024 && (needsFormReset = !0);\n      break;\n    case 6:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4) {\n        if (null === finishedWork.stateNode)\n          throw Error(formatProdErrorMessage(162));\n        flags = finishedWork.memoizedProps;\n        current = finishedWork.stateNode;\n        try {\n          current.nodeValue = flags;\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 3:\n      tagCaches = null;\n      hoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(root.containerInfo);\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      currentHoistableRoot = hoistableRoot;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4 && null !== current && current.memoizedState.isDehydrated)\n        try {\n          retryIfBlockedOn(root.containerInfo);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      needsFormReset &&\n        ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n      break;\n    case 4:\n      flags = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(\n        finishedWork.stateNode.containerInfo\n      );\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      currentHoistableRoot = flags;\n      break;\n    case 12:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      finishedWork.child.flags & 8192 &&\n        (null !== finishedWork.memoizedState) !==\n          (null !== current && null !== current.memoizedState) &&\n        (globalMostRecentFallbackTime = now());\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 22:\n      hoistableRoot = null !== finishedWork.memoizedState;\n      var wasHidden = null !== current && null !== current.memoizedState,\n        prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n        prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || hoistableRoot;\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 8192)\n        a: for (\n          root = finishedWork.stateNode,\n            root._visibility = hoistableRoot\n              ? root._visibility & -2\n              : root._visibility | 1,\n            hoistableRoot &&\n              (null === current ||\n                wasHidden ||\n                offscreenSubtreeIsHidden ||\n                offscreenSubtreeWasHidden ||\n                recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n            current = null,\n            root = finishedWork;\n          ;\n\n        ) {\n          if (5 === root.tag || 26 === root.tag) {\n            if (null === current) {\n              wasHidden = current = root;\n              try {\n                if (((currentResource = wasHidden.stateNode), hoistableRoot))\n                  (maybeNodes = currentResource.style),\n                    \"function\" === typeof maybeNodes.setProperty\n                      ? maybeNodes.setProperty(\"display\", \"none\", \"important\")\n                      : (maybeNodes.display = \"none\");\n                else {\n                  i = wasHidden.stateNode;\n                  var styleProp = wasHidden.memoizedProps.style,\n                    display =\n                      void 0 !== styleProp &&\n                      null !== styleProp &&\n                      styleProp.hasOwnProperty(\"display\")\n                        ? styleProp.display\n                        : null;\n                  i.style.display =\n                    null == display || \"boolean\" === typeof display\n                      ? \"\"\n                      : (\"\" + display).trim();\n                }\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (6 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                wasHidden.stateNode.nodeValue = hoistableRoot\n                  ? \"\"\n                  : wasHidden.memoizedProps;\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (\n            ((22 !== root.tag && 23 !== root.tag) ||\n              null === root.memoizedState ||\n              root === finishedWork) &&\n            null !== root.child\n          ) {\n            root.child.return = root;\n            root = root.child;\n            continue;\n          }\n          if (root === finishedWork) break a;\n          for (; null === root.sibling; ) {\n            if (null === root.return || root.return === finishedWork) break a;\n            current === root && (current = null);\n            root = root.return;\n          }\n          current === root && (current = null);\n          root.sibling.return = root.return;\n          root = root.sibling;\n        }\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((current = flags.retryQueue),\n          null !== current &&\n            ((flags.retryQueue = null),\n            attachSuspenseRetryListeners(finishedWork, current))));\n      break;\n    case 19:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 30:\n      break;\n    case 21:\n      break;\n    default:\n      recursivelyTraverseMutationEffects(root, finishedWork),\n        commitReconciliationEffects(finishedWork);\n  }\n}\nfunction commitReconciliationEffects(finishedWork) {\n  var flags = finishedWork.flags;\n  if (flags & 2) {\n    try {\n      for (\n        var hostParentFiber, parentFiber = finishedWork.return;\n        null !== parentFiber;\n\n      ) {\n        if (isHostParent(parentFiber)) {\n          hostParentFiber = parentFiber;\n          break;\n        }\n        parentFiber = parentFiber.return;\n      }\n      if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));\n      switch (hostParentFiber.tag) {\n        case 27:\n          var parent = hostParentFiber.stateNode,\n            before = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before, parent);\n          break;\n        case 5:\n          var parent$144 = hostParentFiber.stateNode;\n          hostParentFiber.flags & 32 &&\n            (setTextContent(parent$144, \"\"), (hostParentFiber.flags &= -33));\n          var before$145 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before$145, parent$144);\n          break;\n        case 3:\n        case 4:\n          var parent$146 = hostParentFiber.stateNode.containerInfo,\n            before$147 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNodeIntoContainer(\n            finishedWork,\n            before$147,\n            parent$146\n          );\n          break;\n        default:\n          throw Error(formatProdErrorMessage(161));\n      }\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n    finishedWork.flags &= -3;\n  }\n  flags & 4096 && (finishedWork.flags &= -4097);\n}\nfunction recursivelyResetForms(parentFiber) {\n  if (parentFiber.subtreeFlags & 1024)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var fiber = parentFiber;\n      recursivelyResetForms(fiber);\n      5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n      parentFiber = parentFiber.sibling;\n    }\n}\nfunction recursivelyTraverseLayoutEffects(root, parentFiber) {\n  if (parentFiber.subtreeFlags & 8772)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedWork = parentFiber;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 14:\n      case 15:\n        commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 1:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        var instance = finishedWork.stateNode;\n        \"function\" === typeof instance.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            finishedWork,\n            finishedWork.return,\n            instance\n          );\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 27:\n        releaseSingletonInstance(finishedWork.stateNode);\n      case 26:\n      case 5:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 30:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      default:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var current = parentFiber.alternate,\n      finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(4, finishedWork);\n        break;\n      case 1:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        current = finishedWork;\n        finishedRoot = current.stateNode;\n        if (\"function\" === typeof finishedRoot.componentDidMount)\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        current = finishedWork;\n        finishedRoot = current.updateQueue;\n        if (null !== finishedRoot) {\n          var instance = current.stateNode;\n          try {\n            var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;\n            if (null !== hiddenCallbacks)\n              for (\n                finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;\n                finishedRoot < hiddenCallbacks.length;\n                finishedRoot++\n              )\n                callCallback(hiddenCallbacks[finishedRoot], instance);\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        }\n        includeWorkInProgressEffects &&\n          flags & 64 &&\n          commitClassCallbacks(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 27:\n        commitHostSingletonAcquisition(finishedWork);\n      case 26:\n      case 5:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          null === current &&\n          flags & 4 &&\n          commitHostMount(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 12:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        break;\n      case 13:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 30:\n        break;\n      default:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitOffscreenPassiveMountEffects(current, finishedWork) {\n  var previousCache = null;\n  null !== current &&\n    null !== current.memoizedState &&\n    null !== current.memoizedState.cachePool &&\n    (previousCache = current.memoizedState.cachePool.pool);\n  current = null;\n  null !== finishedWork.memoizedState &&\n    null !== finishedWork.memoizedState.cachePool &&\n    (current = finishedWork.memoizedState.cachePool.pool);\n  current !== previousCache &&\n    (null != current && current.refCount++,\n    null != previousCache && releaseCache(previousCache));\n}\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n  current = null;\n  null !== finishedWork.alternate &&\n    (current = finishedWork.alternate.memoizedState.cache);\n  finishedWork = finishedWork.memoizedState.cache;\n  finishedWork !== current &&\n    (finishedWork.refCount++, null != current && releaseCache(current));\n}\nfunction recursivelyTraversePassiveMountEffects(\n  root,\n  parentFiber,\n  committedLanes,\n  committedTransitions\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveMountOnFiber(\n        root,\n        parentFiber,\n        committedLanes,\n        committedTransitions\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveMountOnFiber(\n  finishedRoot,\n  finishedWork,\n  committedLanes,\n  committedTransitions\n) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 && commitHookEffectListMount(9, finishedWork);\n      break;\n    case 1:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 3:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        ((finishedRoot = null),\n        null !== finishedWork.alternate &&\n          (finishedRoot = finishedWork.alternate.memoizedState.cache),\n        (finishedWork = finishedWork.memoizedState.cache),\n        finishedWork !== finishedRoot &&\n          (finishedWork.refCount++,\n          null != finishedRoot && releaseCache(finishedRoot)));\n      break;\n    case 12:\n      if (flags & 2048) {\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n        finishedRoot = finishedWork.stateNode;\n        try {\n          var _finishedWork$memoize2 = finishedWork.memoizedProps,\n            id = _finishedWork$memoize2.id,\n            onPostCommit = _finishedWork$memoize2.onPostCommit;\n          \"function\" === typeof onPostCommit &&\n            onPostCommit(\n              id,\n              null === finishedWork.alternate ? \"mount\" : \"update\",\n              finishedRoot.passiveEffectDuration,\n              -0\n            );\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      } else\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n      break;\n    case 13:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 23:\n      break;\n    case 22:\n      _finishedWork$memoize2 = finishedWork.stateNode;\n      id = finishedWork.alternate;\n      null !== finishedWork.memoizedState\n        ? _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)\n        : _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : ((_finishedWork$memoize2._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              0 !== (finishedWork.subtreeFlags & 10256)\n            ));\n      flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);\n      break;\n    case 24:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n  }\n}\nfunction recursivelyTraverseReconnectPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  committedLanes$jscomp$0,\n  committedTransitions$jscomp$0,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 10256);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      committedLanes = committedLanes$jscomp$0,\n      committedTransitions = committedTransitions$jscomp$0,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(8, finishedWork);\n        break;\n      case 23:\n        break;\n      case 22:\n        var instance = finishedWork.stateNode;\n        null !== finishedWork.memoizedState\n          ? instance._visibility & 2\n            ? recursivelyTraverseReconnectPassiveEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions,\n                includeWorkInProgressEffects\n              )\n            : recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              )\n          : ((instance._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              includeWorkInProgressEffects\n            ));\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitOffscreenPassiveMountEffects(\n            finishedWork.alternate,\n            finishedWork\n          );\n        break;\n      case 24:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n        break;\n      default:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseAtomicPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var finishedRoot = finishedRoot$jscomp$0,\n        finishedWork = parentFiber,\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 22:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitOffscreenPassiveMountEffects(\n              finishedWork.alternate,\n              finishedWork\n            );\n          break;\n        case 24:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n          break;\n        default:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n      }\n      parentFiber = parentFiber.sibling;\n    }\n}\nvar suspenseyCommitFlag = 8192;\nfunction recursivelyAccumulateSuspenseyCommit(parentFiber) {\n  if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      accumulateSuspenseyCommitOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(fiber) {\n  switch (fiber.tag) {\n    case 26:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      fiber.flags & suspenseyCommitFlag &&\n        null !== fiber.memoizedState &&\n        suspendResource(\n          currentHoistableRoot,\n          fiber.memoizedState,\n          fiber.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      break;\n    case 3:\n    case 4:\n      var previousHoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      currentHoistableRoot = previousHoistableRoot;\n      break;\n    case 22:\n      null === fiber.memoizedState &&\n        ((previousHoistableRoot = fiber.alternate),\n        null !== previousHoistableRoot &&\n        null !== previousHoistableRoot.memoizedState\n          ? ((previousHoistableRoot = suspenseyCommitFlag),\n            (suspenseyCommitFlag = 16777216),\n            recursivelyAccumulateSuspenseyCommit(fiber),\n            (suspenseyCommitFlag = previousHoistableRoot))\n          : recursivelyAccumulateSuspenseyCommit(fiber));\n      break;\n    default:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n  }\n}\nfunction detachAlternateSiblings(parentFiber) {\n  var previousFiber = parentFiber.alternate;\n  if (\n    null !== previousFiber &&\n    ((parentFiber = previousFiber.child), null !== parentFiber)\n  ) {\n    previousFiber.child = null;\n    do\n      (previousFiber = parentFiber.sibling),\n        (parentFiber.sibling = null),\n        (parentFiber = previousFiber);\n    while (null !== parentFiber);\n  }\n}\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveUnmountOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      finishedWork.flags & 2048 &&\n        commitHookEffectListUnmount(9, finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 12:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 22:\n      var instance = finishedWork.stateNode;\n      null !== finishedWork.memoizedState &&\n      instance._visibility & 2 &&\n      (null === finishedWork.return || 13 !== finishedWork.return.tag)\n        ? ((instance._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n        : recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n  }\n}\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    deletions = parentFiber;\n    switch (deletions.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, deletions, deletions.return);\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n        break;\n      case 22:\n        i = deletions.stateNode;\n        i._visibility & 2 &&\n          ((i._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(deletions));\n        break;\n      default:\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n  deletedSubtreeRoot,\n  nearestMountedAncestor\n) {\n  for (; null !== nextEffect; ) {\n    var fiber = nextEffect;\n    switch (fiber.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);\n        break;\n      case 23:\n      case 22:\n        if (\n          null !== fiber.memoizedState &&\n          null !== fiber.memoizedState.cachePool\n        ) {\n          var cache = fiber.memoizedState.cachePool.pool;\n          null != cache && cache.refCount++;\n        }\n        break;\n      case 24:\n        releaseCache(fiber.memoizedState.cache);\n    }\n    cache = fiber.child;\n    if (null !== cache) (cache.return = fiber), (nextEffect = cache);\n    else\n      a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n        cache = nextEffect;\n        var sibling = cache.sibling,\n          returnFiber = cache.return;\n        detachFiberAfterEffects(cache);\n        if (cache === fiber) {\n          nextEffect = null;\n          break a;\n        }\n        if (null !== sibling) {\n          sibling.return = returnFiber;\n          nextEffect = sibling;\n          break a;\n        }\n        nextEffect = returnFiber;\n      }\n  }\n}\nvar DefaultAsyncDispatcher = {\n    getCacheForType: function (resourceType) {\n      var cache = readContext(CacheContext),\n        cacheForType = cache.data.get(resourceType);\n      void 0 === cacheForType &&\n        ((cacheForType = resourceType()),\n        cache.data.set(resourceType, cacheForType));\n      return cacheForType;\n    }\n  },\n  PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n  executionContext = 0,\n  workInProgressRoot = null,\n  workInProgress = null,\n  workInProgressRootRenderLanes = 0,\n  workInProgressSuspendedReason = 0,\n  workInProgressThrownValue = null,\n  workInProgressRootDidSkipSuspendedSiblings = !1,\n  workInProgressRootIsPrerendering = !1,\n  workInProgressRootDidAttachPingListener = !1,\n  entangledRenderLanes = 0,\n  workInProgressRootExitStatus = 0,\n  workInProgressRootSkippedLanes = 0,\n  workInProgressRootInterleavedUpdatedLanes = 0,\n  workInProgressRootPingedLanes = 0,\n  workInProgressDeferredLane = 0,\n  workInProgressSuspendedRetryLanes = 0,\n  workInProgressRootConcurrentErrors = null,\n  workInProgressRootRecoverableErrors = null,\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n  globalMostRecentFallbackTime = 0,\n  workInProgressRootRenderTargetTime = Infinity,\n  workInProgressTransitions = null,\n  legacyErrorBoundariesThatAlreadyFailed = null,\n  pendingEffectsStatus = 0,\n  pendingEffectsRoot = null,\n  pendingFinishedWork = null,\n  pendingEffectsLanes = 0,\n  pendingEffectsRemainingLanes = 0,\n  pendingPassiveTransitions = null,\n  pendingRecoverableErrors = null,\n  nestedUpdateCount = 0,\n  rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n  if (0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes)\n    return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;\n  if (null !== ReactSharedInternals.T) {\n    var actionScopeLane = currentEntangledLane;\n    return 0 !== actionScopeLane ? actionScopeLane : requestTransitionLane();\n  }\n  return resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n  0 === workInProgressDeferredLane &&\n    (workInProgressDeferredLane =\n      0 === (workInProgressRootRenderLanes & 536870912) || isHydrating\n        ? claimNextTransitionLane()\n        : 536870912);\n  var suspenseHandler = suspenseHandlerStackCursor.current;\n  null !== suspenseHandler && (suspenseHandler.flags |= 32);\n  return workInProgressDeferredLane;\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n  if (\n    (root === workInProgressRoot &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    prepareFreshStack(root, 0),\n      markRootSuspended(\n        root,\n        workInProgressRootRenderLanes,\n        workInProgressDeferredLane,\n        !1\n      );\n  markRootUpdated$1(root, lane);\n  if (0 === (executionContext & 2) || root !== workInProgressRoot)\n    root === workInProgressRoot &&\n      (0 === (executionContext & 2) &&\n        (workInProgressRootInterleavedUpdatedLanes |= lane),\n      4 === workInProgressRootExitStatus &&\n        markRootSuspended(\n          root,\n          workInProgressRootRenderLanes,\n          workInProgressDeferredLane,\n          !1\n        )),\n      ensureRootIsScheduled(root);\n}\nfunction performWorkOnRoot(root$jscomp$0, lanes, forceSync) {\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  var shouldTimeSlice =\n      (!forceSync &&\n        0 === (lanes & 124) &&\n        0 === (lanes & root$jscomp$0.expiredLanes)) ||\n      checkIfRootIsPrerendering(root$jscomp$0, lanes),\n    exitStatus = shouldTimeSlice\n      ? renderRootConcurrent(root$jscomp$0, lanes)\n      : renderRootSync(root$jscomp$0, lanes, !0),\n    renderWasConcurrent = shouldTimeSlice;\n  do {\n    if (0 === exitStatus) {\n      workInProgressRootIsPrerendering &&\n        !shouldTimeSlice &&\n        markRootSuspended(root$jscomp$0, lanes, 0, !1);\n      break;\n    } else {\n      forceSync = root$jscomp$0.current.alternate;\n      if (\n        renderWasConcurrent &&\n        !isRenderConsistentWithExternalStores(forceSync)\n      ) {\n        exitStatus = renderRootSync(root$jscomp$0, lanes, !1);\n        renderWasConcurrent = !1;\n        continue;\n      }\n      if (2 === exitStatus) {\n        renderWasConcurrent = lanes;\n        if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)\n          var JSCompiler_inline_result = 0;\n        else\n          (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),\n            (JSCompiler_inline_result =\n              0 !== JSCompiler_inline_result\n                ? JSCompiler_inline_result\n                : JSCompiler_inline_result & 536870912\n                  ? 536870912\n                  : 0);\n        if (0 !== JSCompiler_inline_result) {\n          lanes = JSCompiler_inline_result;\n          a: {\n            var root = root$jscomp$0;\n            exitStatus = workInProgressRootConcurrentErrors;\n            var wasRootDehydrated = root.current.memoizedState.isDehydrated;\n            wasRootDehydrated &&\n              (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);\n            JSCompiler_inline_result = renderRootSync(\n              root,\n              JSCompiler_inline_result,\n              !1\n            );\n            if (2 !== JSCompiler_inline_result) {\n              if (\n                workInProgressRootDidAttachPingListener &&\n                !wasRootDehydrated\n              ) {\n                root.errorRecoveryDisabledLanes |= renderWasConcurrent;\n                workInProgressRootInterleavedUpdatedLanes |=\n                  renderWasConcurrent;\n                exitStatus = 4;\n                break a;\n              }\n              renderWasConcurrent = workInProgressRootRecoverableErrors;\n              workInProgressRootRecoverableErrors = exitStatus;\n              null !== renderWasConcurrent &&\n                (null === workInProgressRootRecoverableErrors\n                  ? (workInProgressRootRecoverableErrors = renderWasConcurrent)\n                  : workInProgressRootRecoverableErrors.push.apply(\n                      workInProgressRootRecoverableErrors,\n                      renderWasConcurrent\n                    ));\n            }\n            exitStatus = JSCompiler_inline_result;\n          }\n          renderWasConcurrent = !1;\n          if (2 !== exitStatus) continue;\n        }\n      }\n      if (1 === exitStatus) {\n        prepareFreshStack(root$jscomp$0, 0);\n        markRootSuspended(root$jscomp$0, lanes, 0, !0);\n        break;\n      }\n      a: {\n        shouldTimeSlice = root$jscomp$0;\n        renderWasConcurrent = exitStatus;\n        switch (renderWasConcurrent) {\n          case 0:\n          case 1:\n            throw Error(formatProdErrorMessage(345));\n          case 4:\n            if ((lanes & 4194048) !== lanes) break;\n          case 6:\n            markRootSuspended(\n              shouldTimeSlice,\n              lanes,\n              workInProgressDeferredLane,\n              !workInProgressRootDidSkipSuspendedSiblings\n            );\n            break a;\n          case 2:\n            workInProgressRootRecoverableErrors = null;\n            break;\n          case 3:\n          case 5:\n            break;\n          default:\n            throw Error(formatProdErrorMessage(329));\n        }\n        if (\n          (lanes & 62914560) === lanes &&\n          ((exitStatus = globalMostRecentFallbackTime + 300 - now()),\n          10 < exitStatus)\n        ) {\n          markRootSuspended(\n            shouldTimeSlice,\n            lanes,\n            workInProgressDeferredLane,\n            !workInProgressRootDidSkipSuspendedSiblings\n          );\n          if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n          shouldTimeSlice.timeoutHandle = scheduleTimeout(\n            commitRootWhenReady.bind(\n              null,\n              shouldTimeSlice,\n              forceSync,\n              workInProgressRootRecoverableErrors,\n              workInProgressTransitions,\n              workInProgressRootDidIncludeRecursiveRenderUpdate,\n              lanes,\n              workInProgressDeferredLane,\n              workInProgressRootInterleavedUpdatedLanes,\n              workInProgressSuspendedRetryLanes,\n              workInProgressRootDidSkipSuspendedSiblings,\n              renderWasConcurrent,\n              2,\n              -0,\n              0\n            ),\n            exitStatus\n          );\n          break a;\n        }\n        commitRootWhenReady(\n          shouldTimeSlice,\n          forceSync,\n          workInProgressRootRecoverableErrors,\n          workInProgressTransitions,\n          workInProgressRootDidIncludeRecursiveRenderUpdate,\n          lanes,\n          workInProgressDeferredLane,\n          workInProgressRootInterleavedUpdatedLanes,\n          workInProgressSuspendedRetryLanes,\n          workInProgressRootDidSkipSuspendedSiblings,\n          renderWasConcurrent,\n          0,\n          -0,\n          0\n        );\n      }\n    }\n    break;\n  } while (1);\n  ensureRootIsScheduled(root$jscomp$0);\n}\nfunction commitRootWhenReady(\n  root,\n  finishedWork,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  lanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  didSkipSuspendedSiblings,\n  exitStatus,\n  suspendedCommitReason,\n  completedRenderStartTime,\n  completedRenderEndTime\n) {\n  root.timeoutHandle = -1;\n  suspendedCommitReason = finishedWork.subtreeFlags;\n  if (\n    suspendedCommitReason & 8192 ||\n    16785408 === (suspendedCommitReason & 16785408)\n  )\n    if (\n      ((suspendedState = { stylesheets: null, count: 0, unsuspend: noop }),\n      accumulateSuspenseyCommitOnFiber(finishedWork),\n      (suspendedCommitReason = waitForCommitToBeReady()),\n      null !== suspendedCommitReason)\n    ) {\n      root.cancelPendingCommit = suspendedCommitReason(\n        commitRoot.bind(\n          null,\n          root,\n          finishedWork,\n          lanes,\n          recoverableErrors,\n          transitions,\n          didIncludeRenderPhaseUpdate,\n          spawnedLane,\n          updatedLanes,\n          suspendedRetryLanes,\n          exitStatus,\n          1,\n          completedRenderStartTime,\n          completedRenderEndTime\n        )\n      );\n      markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n      return;\n    }\n  commitRoot(\n    root,\n    finishedWork,\n    lanes,\n    recoverableErrors,\n    transitions,\n    didIncludeRenderPhaseUpdate,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes\n  );\n}\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n  for (var node = finishedWork; ; ) {\n    var tag = node.tag;\n    if (\n      (0 === tag || 11 === tag || 15 === tag) &&\n      node.flags & 16384 &&\n      ((tag = node.updateQueue),\n      null !== tag && ((tag = tag.stores), null !== tag))\n    )\n      for (var i = 0; i < tag.length; i++) {\n        var check = tag[i],\n          getSnapshot = check.getSnapshot;\n        check = check.value;\n        try {\n          if (!objectIs(getSnapshot(), check)) return !1;\n        } catch (error) {\n          return !1;\n        }\n      }\n    tag = node.child;\n    if (node.subtreeFlags & 16384 && null !== tag)\n      (tag.return = node), (node = tag);\n    else {\n      if (node === finishedWork) break;\n      for (; null === node.sibling; ) {\n        if (null === node.return || node.return === finishedWork) return !0;\n        node = node.return;\n      }\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n  return !0;\n}\nfunction markRootSuspended(\n  root,\n  suspendedLanes,\n  spawnedLane,\n  didAttemptEntireTree\n) {\n  suspendedLanes &= ~workInProgressRootPingedLanes;\n  suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n  root.suspendedLanes |= suspendedLanes;\n  root.pingedLanes &= ~suspendedLanes;\n  didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n  didAttemptEntireTree = root.expirationTimes;\n  for (var lanes = suspendedLanes; 0 < lanes; ) {\n    var index$4 = 31 - clz32(lanes),\n      lane = 1 << index$4;\n    didAttemptEntireTree[index$4] = -1;\n    lanes &= ~lane;\n  }\n  0 !== spawnedLane &&\n    markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n}\nfunction flushSyncWork$1() {\n  return 0 === (executionContext & 6)\n    ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n    : !0;\n}\nfunction resetWorkInProgressStack() {\n  if (null !== workInProgress) {\n    if (0 === workInProgressSuspendedReason)\n      var interruptedWork = workInProgress.return;\n    else\n      (interruptedWork = workInProgress),\n        (lastContextDependency = currentlyRenderingFiber$1 = null),\n        resetHooksOnUnwind(interruptedWork),\n        (thenableState = null),\n        (thenableIndexCounter = 0),\n        (interruptedWork = workInProgress);\n    for (; null !== interruptedWork; )\n      unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n        (interruptedWork = interruptedWork.return);\n    workInProgress = null;\n  }\n}\nfunction prepareFreshStack(root, lanes) {\n  var timeoutHandle = root.timeoutHandle;\n  -1 !== timeoutHandle &&\n    ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n  timeoutHandle = root.cancelPendingCommit;\n  null !== timeoutHandle &&\n    ((root.cancelPendingCommit = null), timeoutHandle());\n  resetWorkInProgressStack();\n  workInProgressRoot = root;\n  workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n  workInProgressRootRenderLanes = lanes;\n  workInProgressSuspendedReason = 0;\n  workInProgressThrownValue = null;\n  workInProgressRootDidSkipSuspendedSiblings = !1;\n  workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n  workInProgressRootDidAttachPingListener = !1;\n  workInProgressSuspendedRetryLanes =\n    workInProgressDeferredLane =\n    workInProgressRootPingedLanes =\n    workInProgressRootInterleavedUpdatedLanes =\n    workInProgressRootSkippedLanes =\n    workInProgressRootExitStatus =\n      0;\n  workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n    null;\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n  0 !== (lanes & 8) && (lanes |= lanes & 32);\n  var allEntangledLanes = root.entangledLanes;\n  if (0 !== allEntangledLanes)\n    for (\n      root = root.entanglements, allEntangledLanes &= lanes;\n      0 < allEntangledLanes;\n\n    ) {\n      var index$2 = 31 - clz32(allEntangledLanes),\n        lane = 1 << index$2;\n      lanes |= root[index$2];\n      allEntangledLanes &= ~lane;\n    }\n  entangledRenderLanes = lanes;\n  finishQueueingConcurrentUpdates();\n  return timeoutHandle;\n}\nfunction handleThrow(root, thrownValue) {\n  currentlyRenderingFiber = null;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  thrownValue === SuspenseException || thrownValue === SuspenseActionException\n    ? ((thrownValue = getSuspendedThenable()),\n      (workInProgressSuspendedReason = 3))\n    : thrownValue === SuspenseyCommitException\n      ? ((thrownValue = getSuspendedThenable()),\n        (workInProgressSuspendedReason = 4))\n      : (workInProgressSuspendedReason =\n          thrownValue === SelectiveHydrationException\n            ? 8\n            : null !== thrownValue &&\n                \"object\" === typeof thrownValue &&\n                \"function\" === typeof thrownValue.then\n              ? 6\n              : 1);\n  workInProgressThrownValue = thrownValue;\n  null === workInProgress &&\n    ((workInProgressRootExitStatus = 1),\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    ));\n}\nfunction pushDispatcher() {\n  var prevDispatcher = ReactSharedInternals.H;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction pushAsyncDispatcher() {\n  var prevAsyncDispatcher = ReactSharedInternals.A;\n  ReactSharedInternals.A = DefaultAsyncDispatcher;\n  return prevAsyncDispatcher;\n}\nfunction renderDidSuspendDelayIfPossible() {\n  workInProgressRootExitStatus = 4;\n  workInProgressRootDidSkipSuspendedSiblings ||\n    ((workInProgressRootRenderLanes & 4194048) !==\n      workInProgressRootRenderLanes &&\n      null !== suspenseHandlerStackCursor.current) ||\n    (workInProgressRootIsPrerendering = !0);\n  (0 === (workInProgressRootSkippedLanes & 134217727) &&\n    0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n    null === workInProgressRoot ||\n    markRootSuspended(\n      workInProgressRoot,\n      workInProgressRootRenderLanes,\n      workInProgressDeferredLane,\n      !1\n    );\n}\nfunction renderRootSync(root, lanes, shouldYieldForPrerendering) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)\n    (workInProgressTransitions = null), prepareFreshStack(root, lanes);\n  lanes = !1;\n  var exitStatus = workInProgressRootExitStatus;\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        var unitOfWork = workInProgress,\n          thrownValue = workInProgressThrownValue;\n        switch (workInProgressSuspendedReason) {\n          case 8:\n            resetWorkInProgressStack();\n            exitStatus = 6;\n            break a;\n          case 3:\n          case 2:\n          case 9:\n          case 6:\n            null === suspenseHandlerStackCursor.current && (lanes = !0);\n            var reason = workInProgressSuspendedReason;\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n            if (\n              shouldYieldForPrerendering &&\n              workInProgressRootIsPrerendering\n            ) {\n              exitStatus = 0;\n              break a;\n            }\n            break;\n          default:\n            (reason = workInProgressSuspendedReason),\n              (workInProgressSuspendedReason = 0),\n              (workInProgressThrownValue = null),\n              throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n        }\n      }\n      workLoopSync();\n      exitStatus = workInProgressRootExitStatus;\n      break;\n    } catch (thrownValue$167) {\n      handleThrow(root, thrownValue$167);\n    }\n  while (1);\n  lanes && root.shellSuspendCounter++;\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  executionContext = prevExecutionContext;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  null === workInProgress &&\n    ((workInProgressRoot = null),\n    (workInProgressRootRenderLanes = 0),\n    finishQueueingConcurrentUpdates());\n  return exitStatus;\n}\nfunction workLoopSync() {\n  for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction renderRootConcurrent(root, lanes) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes\n    ? ((workInProgressTransitions = null),\n      (workInProgressRootRenderTargetTime = now() + 500),\n      prepareFreshStack(root, lanes))\n    : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n        root,\n        lanes\n      ));\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        lanes = workInProgress;\n        var thrownValue = workInProgressThrownValue;\n        b: switch (workInProgressSuspendedReason) {\n          case 1:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);\n            break;\n          case 2:\n          case 9:\n            if (isThenableResolved(thrownValue)) {\n              workInProgressSuspendedReason = 0;\n              workInProgressThrownValue = null;\n              replaySuspendedUnitOfWork(lanes);\n              break;\n            }\n            lanes = function () {\n              (2 !== workInProgressSuspendedReason &&\n                9 !== workInProgressSuspendedReason) ||\n                workInProgressRoot !== root ||\n                (workInProgressSuspendedReason = 7);\n              ensureRootIsScheduled(root);\n            };\n            thrownValue.then(lanes, lanes);\n            break a;\n          case 3:\n            workInProgressSuspendedReason = 7;\n            break a;\n          case 4:\n            workInProgressSuspendedReason = 5;\n            break a;\n          case 7:\n            isThenableResolved(thrownValue)\n              ? ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                replaySuspendedUnitOfWork(lanes))\n              : ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));\n            break;\n          case 5:\n            var resource = null;\n            switch (workInProgress.tag) {\n              case 26:\n                resource = workInProgress.memoizedState;\n              case 5:\n              case 27:\n                var hostFiber = workInProgress;\n                if (resource ? preloadResource(resource) : 1) {\n                  workInProgressSuspendedReason = 0;\n                  workInProgressThrownValue = null;\n                  var sibling = hostFiber.sibling;\n                  if (null !== sibling) workInProgress = sibling;\n                  else {\n                    var returnFiber = hostFiber.return;\n                    null !== returnFiber\n                      ? ((workInProgress = returnFiber),\n                        completeUnitOfWork(returnFiber))\n                      : (workInProgress = null);\n                  }\n                  break b;\n                }\n            }\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);\n            break;\n          case 6:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);\n            break;\n          case 8:\n            resetWorkInProgressStack();\n            workInProgressRootExitStatus = 6;\n            break a;\n          default:\n            throw Error(formatProdErrorMessage(462));\n        }\n      }\n      workLoopConcurrentByScheduler();\n      break;\n    } catch (thrownValue$169) {\n      handleThrow(root, thrownValue$169);\n    }\n  while (1);\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  executionContext = prevExecutionContext;\n  if (null !== workInProgress) return 0;\n  workInProgressRoot = null;\n  workInProgressRootRenderLanes = 0;\n  finishQueueingConcurrentUpdates();\n  return workInProgressRootExitStatus;\n}\nfunction workLoopConcurrentByScheduler() {\n  for (; null !== workInProgress && !shouldYield(); )\n    performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n  var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n  var next = unitOfWork;\n  var current = next.alternate;\n  switch (next.tag) {\n    case 15:\n    case 0:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type,\n        void 0,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 11:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type.render,\n        next.ref,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 5:\n      resetHooksOnUnwind(next);\n    default:\n      unwindInterruptedWork(current, next),\n        (next = workInProgress =\n          resetWorkInProgress(next, entangledRenderLanes)),\n        (next = beginWork(current, next, entangledRenderLanes));\n  }\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction throwAndUnwindWorkLoop(\n  root,\n  unitOfWork,\n  thrownValue,\n  suspendedReason\n) {\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  resetHooksOnUnwind(unitOfWork);\n  thenableState = null;\n  thenableIndexCounter = 0;\n  var returnFiber = unitOfWork.return;\n  try {\n    if (\n      throwException(\n        root,\n        returnFiber,\n        unitOfWork,\n        thrownValue,\n        workInProgressRootRenderLanes\n      )\n    ) {\n      workInProgressRootExitStatus = 1;\n      logUncaughtError(\n        root,\n        createCapturedValueAtFiber(thrownValue, root.current)\n      );\n      workInProgress = null;\n      return;\n    }\n  } catch (error) {\n    if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n    workInProgressRootExitStatus = 1;\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    );\n    workInProgress = null;\n    return;\n  }\n  if (unitOfWork.flags & 32768) {\n    if (isHydrating || 1 === suspendedReason) root = !0;\n    else if (\n      workInProgressRootIsPrerendering ||\n      0 !== (workInProgressRootRenderLanes & 536870912)\n    )\n      root = !1;\n    else if (\n      ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n      2 === suspendedReason ||\n        9 === suspendedReason ||\n        3 === suspendedReason ||\n        6 === suspendedReason)\n    )\n      (suspendedReason = suspenseHandlerStackCursor.current),\n        null !== suspendedReason &&\n          13 === suspendedReason.tag &&\n          (suspendedReason.flags |= 16384);\n    unwindUnitOfWork(unitOfWork, root);\n  } else completeUnitOfWork(unitOfWork);\n}\nfunction completeUnitOfWork(unitOfWork) {\n  var completedWork = unitOfWork;\n  do {\n    if (0 !== (completedWork.flags & 32768)) {\n      unwindUnitOfWork(\n        completedWork,\n        workInProgressRootDidSkipSuspendedSiblings\n      );\n      return;\n    }\n    unitOfWork = completedWork.return;\n    var next = completeWork(\n      completedWork.alternate,\n      completedWork,\n      entangledRenderLanes\n    );\n    if (null !== next) {\n      workInProgress = next;\n      return;\n    }\n    completedWork = completedWork.sibling;\n    if (null !== completedWork) {\n      workInProgress = completedWork;\n      return;\n    }\n    workInProgress = completedWork = unitOfWork;\n  } while (null !== completedWork);\n  0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction unwindUnitOfWork(unitOfWork, skipSiblings) {\n  do {\n    var next = unwindWork(unitOfWork.alternate, unitOfWork);\n    if (null !== next) {\n      next.flags &= 32767;\n      workInProgress = next;\n      return;\n    }\n    next = unitOfWork.return;\n    null !== next &&\n      ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));\n    if (\n      !skipSiblings &&\n      ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n    ) {\n      workInProgress = unitOfWork;\n      return;\n    }\n    workInProgress = unitOfWork = next;\n  } while (null !== unitOfWork);\n  workInProgressRootExitStatus = 6;\n  workInProgress = null;\n}\nfunction commitRoot(\n  root,\n  finishedWork,\n  lanes,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  root.cancelPendingCommit = null;\n  do flushPendingEffects();\n  while (0 !== pendingEffectsStatus);\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  if (null !== finishedWork) {\n    if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n    didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes;\n    didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n    markRootFinished(\n      root,\n      lanes,\n      didIncludeRenderPhaseUpdate,\n      spawnedLane,\n      updatedLanes,\n      suspendedRetryLanes\n    );\n    root === workInProgressRoot &&\n      ((workInProgress = workInProgressRoot = null),\n      (workInProgressRootRenderLanes = 0));\n    pendingFinishedWork = finishedWork;\n    pendingEffectsRoot = root;\n    pendingEffectsLanes = lanes;\n    pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n    pendingPassiveTransitions = transitions;\n    pendingRecoverableErrors = recoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? ((root.callbackNode = null),\n        (root.callbackPriority = 0),\n        scheduleCallback$1(NormalPriority$1, function () {\n          flushPassiveEffects(!0);\n          return null;\n        }))\n      : ((root.callbackNode = null), (root.callbackPriority = 0));\n    recoverableErrors = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n      recoverableErrors = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      transitions = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      spawnedLane = executionContext;\n      executionContext |= 4;\n      try {\n        commitBeforeMutationEffects(root, finishedWork, lanes);\n      } finally {\n        (executionContext = spawnedLane),\n          (ReactDOMSharedInternals.p = transitions),\n          (ReactSharedInternals.T = recoverableErrors);\n      }\n    }\n    pendingEffectsStatus = 1;\n    flushMutationEffects();\n    flushLayoutEffects();\n    flushSpawnedWork();\n  }\n}\nfunction flushMutationEffects() {\n  if (1 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {\n      rootMutationHasEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitMutationEffectsOnFiber(finishedWork, root);\n        var priorSelectionInformation = selectionInformation,\n          curFocusedElem = getActiveElementDeep(root.containerInfo),\n          priorFocusedElem = priorSelectionInformation.focusedElem,\n          priorSelectionRange = priorSelectionInformation.selectionRange;\n        if (\n          curFocusedElem !== priorFocusedElem &&\n          priorFocusedElem &&\n          priorFocusedElem.ownerDocument &&\n          containsNode(\n            priorFocusedElem.ownerDocument.documentElement,\n            priorFocusedElem\n          )\n        ) {\n          if (\n            null !== priorSelectionRange &&\n            hasSelectionCapabilities(priorFocusedElem)\n          ) {\n            var start = priorSelectionRange.start,\n              end = priorSelectionRange.end;\n            void 0 === end && (end = start);\n            if (\"selectionStart\" in priorFocusedElem)\n              (priorFocusedElem.selectionStart = start),\n                (priorFocusedElem.selectionEnd = Math.min(\n                  end,\n                  priorFocusedElem.value.length\n                ));\n            else {\n              var doc = priorFocusedElem.ownerDocument || document,\n                win = (doc && doc.defaultView) || window;\n              if (win.getSelection) {\n                var selection = win.getSelection(),\n                  length = priorFocusedElem.textContent.length,\n                  start$jscomp$0 = Math.min(priorSelectionRange.start, length),\n                  end$jscomp$0 =\n                    void 0 === priorSelectionRange.end\n                      ? start$jscomp$0\n                      : Math.min(priorSelectionRange.end, length);\n                !selection.extend &&\n                  start$jscomp$0 > end$jscomp$0 &&\n                  ((curFocusedElem = end$jscomp$0),\n                  (end$jscomp$0 = start$jscomp$0),\n                  (start$jscomp$0 = curFocusedElem));\n                var startMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    start$jscomp$0\n                  ),\n                  endMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    end$jscomp$0\n                  );\n                if (\n                  startMarker &&\n                  endMarker &&\n                  (1 !== selection.rangeCount ||\n                    selection.anchorNode !== startMarker.node ||\n                    selection.anchorOffset !== startMarker.offset ||\n                    selection.focusNode !== endMarker.node ||\n                    selection.focusOffset !== endMarker.offset)\n                ) {\n                  var range = doc.createRange();\n                  range.setStart(startMarker.node, startMarker.offset);\n                  selection.removeAllRanges();\n                  start$jscomp$0 > end$jscomp$0\n                    ? (selection.addRange(range),\n                      selection.extend(endMarker.node, endMarker.offset))\n                    : (range.setEnd(endMarker.node, endMarker.offset),\n                      selection.addRange(range));\n                }\n              }\n            }\n          }\n          doc = [];\n          for (\n            selection = priorFocusedElem;\n            (selection = selection.parentNode);\n\n          )\n            1 === selection.nodeType &&\n              doc.push({\n                element: selection,\n                left: selection.scrollLeft,\n                top: selection.scrollTop\n              });\n          \"function\" === typeof priorFocusedElem.focus &&\n            priorFocusedElem.focus();\n          for (\n            priorFocusedElem = 0;\n            priorFocusedElem < doc.length;\n            priorFocusedElem++\n          ) {\n            var info = doc[priorFocusedElem];\n            info.element.scrollLeft = info.left;\n            info.element.scrollTop = info.top;\n          }\n        }\n        _enabled = !!eventsEnabled;\n        selectionInformation = eventsEnabled = null;\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootMutationHasEffect);\n      }\n    }\n    root.current = finishedWork;\n    pendingEffectsStatus = 2;\n  }\n}\nfunction flushLayoutEffects() {\n  if (2 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n    if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n      rootHasLayoutEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootHasLayoutEffect);\n      }\n    }\n    pendingEffectsStatus = 3;\n  }\n}\nfunction flushSpawnedWork() {\n  if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    requestPaint();\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      lanes = pendingEffectsLanes,\n      recoverableErrors = pendingRecoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? (pendingEffectsStatus = 5)\n      : ((pendingEffectsStatus = 0),\n        (pendingFinishedWork = pendingEffectsRoot = null),\n        releaseRootPooledCache(root, root.pendingLanes));\n    var remainingLanes = root.pendingLanes;\n    0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n    lanesToEventPriority(lanes);\n    finishedWork = finishedWork.stateNode;\n    if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n      try {\n        injectedHook.onCommitFiberRoot(\n          rendererID,\n          finishedWork,\n          void 0,\n          128 === (finishedWork.current.flags & 128)\n        );\n      } catch (err) {}\n    if (null !== recoverableErrors) {\n      finishedWork = ReactSharedInternals.T;\n      remainingLanes = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      ReactSharedInternals.T = null;\n      try {\n        for (\n          var onRecoverableError = root.onRecoverableError, i = 0;\n          i < recoverableErrors.length;\n          i++\n        ) {\n          var recoverableError = recoverableErrors[i];\n          onRecoverableError(recoverableError.value, {\n            componentStack: recoverableError.stack\n          });\n        }\n      } finally {\n        (ReactSharedInternals.T = finishedWork),\n          (ReactDOMSharedInternals.p = remainingLanes);\n      }\n    }\n    0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n    ensureRootIsScheduled(root);\n    remainingLanes = root.pendingLanes;\n    0 !== (lanes & 4194090) && 0 !== (remainingLanes & 42)\n      ? root === rootWithNestedUpdates\n        ? nestedUpdateCount++\n        : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n      : (nestedUpdateCount = 0);\n    flushSyncWorkAcrossRoots_impl(0, !1);\n  }\n}\nfunction releaseRootPooledCache(root, remainingLanes) {\n  0 === (root.pooledCacheLanes &= remainingLanes) &&\n    ((remainingLanes = root.pooledCache),\n    null != remainingLanes &&\n      ((root.pooledCache = null), releaseCache(remainingLanes)));\n}\nfunction flushPendingEffects(wasDelayedCommit) {\n  flushMutationEffects();\n  flushLayoutEffects();\n  flushSpawnedWork();\n  return flushPassiveEffects(wasDelayedCommit);\n}\nfunction flushPassiveEffects() {\n  if (5 !== pendingEffectsStatus) return !1;\n  var root = pendingEffectsRoot,\n    remainingLanes = pendingEffectsRemainingLanes;\n  pendingEffectsRemainingLanes = 0;\n  var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n    prevTransition = ReactSharedInternals.T,\n    previousPriority = ReactDOMSharedInternals.p;\n  try {\n    ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n    ReactSharedInternals.T = null;\n    renderPriority = pendingPassiveTransitions;\n    pendingPassiveTransitions = null;\n    var root$jscomp$0 = pendingEffectsRoot,\n      lanes = pendingEffectsLanes;\n    pendingEffectsStatus = 0;\n    pendingFinishedWork = pendingEffectsRoot = null;\n    pendingEffectsLanes = 0;\n    if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));\n    var prevExecutionContext = executionContext;\n    executionContext |= 4;\n    commitPassiveUnmountOnFiber(root$jscomp$0.current);\n    commitPassiveMountOnFiber(\n      root$jscomp$0,\n      root$jscomp$0.current,\n      lanes,\n      renderPriority\n    );\n    executionContext = prevExecutionContext;\n    flushSyncWorkAcrossRoots_impl(0, !1);\n    if (\n      injectedHook &&\n      \"function\" === typeof injectedHook.onPostCommitFiberRoot\n    )\n      try {\n        injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n      } catch (err) {}\n    return !0;\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition),\n      releaseRootPooledCache(root, remainingLanes);\n  }\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n  sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n  sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n  rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n  null !== rootFiber &&\n    (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n  if (3 === sourceFiber.tag)\n    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n  else\n    for (; null !== nearestMountedAncestor; ) {\n      if (3 === nearestMountedAncestor.tag) {\n        captureCommitPhaseErrorOnRoot(\n          nearestMountedAncestor,\n          sourceFiber,\n          error\n        );\n        break;\n      } else if (1 === nearestMountedAncestor.tag) {\n        var instance = nearestMountedAncestor.stateNode;\n        if (\n          \"function\" ===\n            typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n          (\"function\" === typeof instance.componentDidCatch &&\n            (null === legacyErrorBoundariesThatAlreadyFailed ||\n              !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n        ) {\n          sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n          error = createClassErrorUpdate(2);\n          instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n          null !== instance &&\n            (initializeClassErrorUpdate(\n              error,\n              instance,\n              nearestMountedAncestor,\n              sourceFiber\n            ),\n            markRootUpdated$1(instance, 2),\n            ensureRootIsScheduled(instance));\n          break;\n        }\n      }\n      nearestMountedAncestor = nearestMountedAncestor.return;\n    }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n  var pingCache = root.pingCache;\n  if (null === pingCache) {\n    pingCache = root.pingCache = new PossiblyWeakMap();\n    var threadIDs = new Set();\n    pingCache.set(wakeable, threadIDs);\n  } else\n    (threadIDs = pingCache.get(wakeable)),\n      void 0 === threadIDs &&\n        ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n  threadIDs.has(lanes) ||\n    ((workInProgressRootDidAttachPingListener = !0),\n    threadIDs.add(lanes),\n    (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n    wakeable.then(root, root));\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n  var pingCache = root.pingCache;\n  null !== pingCache && pingCache.delete(wakeable);\n  root.pingedLanes |= root.suspendedLanes & pingedLanes;\n  root.warmLanes &= ~pingedLanes;\n  workInProgressRoot === root &&\n    (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n    (4 === workInProgressRootExitStatus ||\n    (3 === workInProgressRootExitStatus &&\n      (workInProgressRootRenderLanes & 62914560) ===\n        workInProgressRootRenderLanes &&\n      300 > now() - globalMostRecentFallbackTime)\n      ? 0 === (executionContext & 2) && prepareFreshStack(root, 0)\n      : (workInProgressRootPingedLanes |= pingedLanes),\n    workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n      (workInProgressSuspendedRetryLanes = 0));\n  ensureRootIsScheduled(root);\n}\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n  0 === retryLane && (retryLane = claimNextRetryLane());\n  boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n  null !== boundaryFiber &&\n    (markRootUpdated$1(boundaryFiber, retryLane),\n    ensureRootIsScheduled(boundaryFiber));\n}\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n  var suspenseState = boundaryFiber.memoizedState,\n    retryLane = 0;\n  null !== suspenseState && (retryLane = suspenseState.retryLane);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n  var retryLane = 0;\n  switch (boundaryFiber.tag) {\n    case 13:\n      var retryCache = boundaryFiber.stateNode;\n      var suspenseState = boundaryFiber.memoizedState;\n      null !== suspenseState && (retryLane = suspenseState.retryLane);\n      break;\n    case 19:\n      retryCache = boundaryFiber.stateNode;\n      break;\n    case 22:\n      retryCache = boundaryFiber.stateNode._retryCache;\n      break;\n    default:\n      throw Error(formatProdErrorMessage(314));\n  }\n  null !== retryCache && retryCache.delete(wakeable);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction scheduleCallback$1(priorityLevel, callback) {\n  return scheduleCallback$3(priorityLevel, callback);\n}\nvar firstScheduledRoot = null,\n  lastScheduledRoot = null,\n  didScheduleMicrotask = !1,\n  mightHavePendingSyncWork = !1,\n  isFlushingWork = !1,\n  currentEventTransitionLane = 0;\nfunction ensureRootIsScheduled(root) {\n  root !== lastScheduledRoot &&\n    null === root.next &&\n    (null === lastScheduledRoot\n      ? (firstScheduledRoot = lastScheduledRoot = root)\n      : (lastScheduledRoot = lastScheduledRoot.next = root));\n  mightHavePendingSyncWork = !0;\n  didScheduleMicrotask ||\n    ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n  if (!isFlushingWork && mightHavePendingSyncWork) {\n    isFlushingWork = !0;\n    do {\n      var didPerformSomeWork = !1;\n      for (var root$174 = firstScheduledRoot; null !== root$174; ) {\n        if (!onlyLegacy)\n          if (0 !== syncTransitionLanes) {\n            var pendingLanes = root$174.pendingLanes;\n            if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n            else {\n              var suspendedLanes = root$174.suspendedLanes,\n                pingedLanes = root$174.pingedLanes;\n              JSCompiler_inline_result =\n                (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n              JSCompiler_inline_result &=\n                pendingLanes & ~(suspendedLanes & ~pingedLanes);\n              JSCompiler_inline_result =\n                JSCompiler_inline_result & 201326741\n                  ? (JSCompiler_inline_result & 201326741) | 1\n                  : JSCompiler_inline_result\n                    ? JSCompiler_inline_result | 2\n                    : 0;\n            }\n            0 !== JSCompiler_inline_result &&\n              ((didPerformSomeWork = !0),\n              performSyncWorkOnRoot(root$174, JSCompiler_inline_result));\n          } else\n            (JSCompiler_inline_result = workInProgressRootRenderLanes),\n              (JSCompiler_inline_result = getNextLanes(\n                root$174,\n                root$174 === workInProgressRoot ? JSCompiler_inline_result : 0,\n                null !== root$174.cancelPendingCommit ||\n                  -1 !== root$174.timeoutHandle\n              )),\n              0 === (JSCompiler_inline_result & 3) ||\n                checkIfRootIsPrerendering(root$174, JSCompiler_inline_result) ||\n                ((didPerformSomeWork = !0),\n                performSyncWorkOnRoot(root$174, JSCompiler_inline_result));\n        root$174 = root$174.next;\n      }\n    } while (didPerformSomeWork);\n    isFlushingWork = !1;\n  }\n}\nfunction processRootScheduleInImmediateTask() {\n  processRootScheduleInMicrotask();\n}\nfunction processRootScheduleInMicrotask() {\n  mightHavePendingSyncWork = didScheduleMicrotask = !1;\n  var syncTransitionLanes = 0;\n  0 !== currentEventTransitionLane &&\n    (shouldAttemptEagerTransition() &&\n      (syncTransitionLanes = currentEventTransitionLane),\n    (currentEventTransitionLane = 0));\n  for (\n    var currentTime = now(), prev = null, root = firstScheduledRoot;\n    null !== root;\n\n  ) {\n    var next = root.next,\n      nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n    if (0 === nextLanes)\n      (root.next = null),\n        null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n        null === next && (lastScheduledRoot = prev);\n    else if (\n      ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n    )\n      mightHavePendingSyncWork = !0;\n    root = next;\n  }\n  flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n}\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n  for (\n    var suspendedLanes = root.suspendedLanes,\n      pingedLanes = root.pingedLanes,\n      expirationTimes = root.expirationTimes,\n      lanes = root.pendingLanes & -62914561;\n    0 < lanes;\n\n  ) {\n    var index$3 = 31 - clz32(lanes),\n      lane = 1 << index$3,\n      expirationTime = expirationTimes[index$3];\n    if (-1 === expirationTime) {\n      if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n        expirationTimes[index$3] = computeExpirationTime(lane, currentTime);\n    } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n    lanes &= ~lane;\n  }\n  currentTime = workInProgressRoot;\n  suspendedLanes = workInProgressRootRenderLanes;\n  suspendedLanes = getNextLanes(\n    root,\n    root === currentTime ? suspendedLanes : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  pingedLanes = root.callbackNode;\n  if (\n    0 === suspendedLanes ||\n    (root === currentTime &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    return (\n      null !== pingedLanes &&\n        null !== pingedLanes &&\n        cancelCallback$1(pingedLanes),\n      (root.callbackNode = null),\n      (root.callbackPriority = 0)\n    );\n  if (\n    0 === (suspendedLanes & 3) ||\n    checkIfRootIsPrerendering(root, suspendedLanes)\n  ) {\n    currentTime = suspendedLanes & -suspendedLanes;\n    if (currentTime === root.callbackPriority) return currentTime;\n    null !== pingedLanes && cancelCallback$1(pingedLanes);\n    switch (lanesToEventPriority(suspendedLanes)) {\n      case 2:\n      case 8:\n        suspendedLanes = UserBlockingPriority;\n        break;\n      case 32:\n        suspendedLanes = NormalPriority$1;\n        break;\n      case 268435456:\n        suspendedLanes = IdlePriority;\n        break;\n      default:\n        suspendedLanes = NormalPriority$1;\n    }\n    pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n    suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);\n    root.callbackPriority = currentTime;\n    root.callbackNode = suspendedLanes;\n    return currentTime;\n  }\n  null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);\n  root.callbackPriority = 2;\n  root.callbackNode = null;\n  return 2;\n}\nfunction performWorkOnRootViaSchedulerTask(root, didTimeout) {\n  if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)\n    return (root.callbackNode = null), (root.callbackPriority = 0), null;\n  var originalCallbackNode = root.callbackNode;\n  if (flushPendingEffects(!0) && root.callbackNode !== originalCallbackNode)\n    return null;\n  var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;\n  workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n    root,\n    root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n  performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);\n  scheduleTaskForRootDuringMicrotask(root, now());\n  return null != root.callbackNode && root.callbackNode === originalCallbackNode\n    ? performWorkOnRootViaSchedulerTask.bind(null, root)\n    : null;\n}\nfunction performSyncWorkOnRoot(root, lanes) {\n  if (flushPendingEffects()) return null;\n  performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateRootScheduleTask() {\n  scheduleMicrotask(function () {\n    0 !== (executionContext & 6)\n      ? scheduleCallback$3(\n          ImmediatePriority,\n          processRootScheduleInImmediateTask\n        )\n      : processRootScheduleInMicrotask();\n  });\n}\nfunction requestTransitionLane() {\n  0 === currentEventTransitionLane &&\n    (currentEventTransitionLane = claimNextTransitionLane());\n  return currentEventTransitionLane;\n}\nfunction coerceFormActionProp(actionProp) {\n  return null == actionProp ||\n    \"symbol\" === typeof actionProp ||\n    \"boolean\" === typeof actionProp\n    ? null\n    : \"function\" === typeof actionProp\n      ? actionProp\n      : sanitizeURL(\"\" + actionProp);\n}\nfunction createFormDataWithSubmitter(form, submitter) {\n  var temp = submitter.ownerDocument.createElement(\"input\");\n  temp.name = submitter.name;\n  temp.value = submitter.value;\n  form.id && temp.setAttribute(\"form\", form.id);\n  submitter.parentNode.insertBefore(temp, submitter);\n  form = new FormData(form);\n  temp.parentNode.removeChild(temp);\n  return form;\n}\nfunction extractEvents$1(\n  dispatchQueue,\n  domEventName,\n  maybeTargetInst,\n  nativeEvent,\n  nativeEventTarget\n) {\n  if (\n    \"submit\" === domEventName &&\n    maybeTargetInst &&\n    maybeTargetInst.stateNode === nativeEventTarget\n  ) {\n    var action = coerceFormActionProp(\n        (nativeEventTarget[internalPropsKey] || null).action\n      ),\n      submitter = nativeEvent.submitter;\n    submitter &&\n      ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n        ? coerceFormActionProp(domEventName.formAction)\n        : submitter.getAttribute(\"formAction\")),\n      null !== domEventName && ((action = domEventName), (submitter = null)));\n    var event = new SyntheticEvent(\n      \"action\",\n      \"action\",\n      null,\n      nativeEvent,\n      nativeEventTarget\n    );\n    dispatchQueue.push({\n      event: event,\n      listeners: [\n        {\n          instance: null,\n          listener: function () {\n            if (nativeEvent.defaultPrevented) {\n              if (0 !== currentEventTransitionLane) {\n                var formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget);\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  null,\n                  formData\n                );\n              }\n            } else\n              \"function\" === typeof action &&\n                (event.preventDefault(),\n                (formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget)),\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  action,\n                  formData\n                ));\n          },\n          currentTarget: nativeEventTarget\n        }\n      ]\n    });\n  }\n}\nfor (\n  var i$jscomp$inline_1528 = 0;\n  i$jscomp$inline_1528 < simpleEventPluginEvents.length;\n  i$jscomp$inline_1528++\n) {\n  var eventName$jscomp$inline_1529 =\n      simpleEventPluginEvents[i$jscomp$inline_1528],\n    domEventName$jscomp$inline_1530 =\n      eventName$jscomp$inline_1529.toLowerCase(),\n    capitalizedEvent$jscomp$inline_1531 =\n      eventName$jscomp$inline_1529[0].toUpperCase() +\n      eventName$jscomp$inline_1529.slice(1);\n  registerSimpleEvent(\n    domEventName$jscomp$inline_1530,\n    \"on\" + capitalizedEvent$jscomp$inline_1531\n  );\n}\nregisterSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\nregisterSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\nregisterSimpleEvent(ANIMATION_START, \"onAnimationStart\");\nregisterSimpleEvent(\"dblclick\", \"onDoubleClick\");\nregisterSimpleEvent(\"focusin\", \"onFocus\");\nregisterSimpleEvent(\"focusout\", \"onBlur\");\nregisterSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\nregisterSimpleEvent(TRANSITION_START, \"onTransitionStart\");\nregisterSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\nregisterSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\nregisterDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\nregisterDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\nregisterTwoPhaseEvent(\n  \"onChange\",\n  \"change click focusin focusout input keydown keyup selectionchange\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onSelect\",\n  \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n    \" \"\n  )\n);\nregisterTwoPhaseEvent(\"onBeforeInput\", [\n  \"compositionend\",\n  \"keypress\",\n  \"textInput\",\n  \"paste\"\n]);\nregisterTwoPhaseEvent(\n  \"onCompositionEnd\",\n  \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionStart\",\n  \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionUpdate\",\n  \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n);\nvar mediaEventTypes =\n    \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n      \" \"\n    ),\n  nonDelegatedEvents = new Set(\n    \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n      .split(\" \")\n      .concat(mediaEventTypes)\n  );\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n  eventSystemFlags = 0 !== (eventSystemFlags & 4);\n  for (var i = 0; i < dispatchQueue.length; i++) {\n    var _dispatchQueue$i = dispatchQueue[i],\n      event = _dispatchQueue$i.event;\n    _dispatchQueue$i = _dispatchQueue$i.listeners;\n    a: {\n      var previousInstance = void 0;\n      if (eventSystemFlags)\n        for (\n          var i$jscomp$0 = _dispatchQueue$i.length - 1;\n          0 <= i$jscomp$0;\n          i$jscomp$0--\n        ) {\n          var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n            instance = _dispatchListeners$i.instance,\n            currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n      else\n        for (\n          i$jscomp$0 = 0;\n          i$jscomp$0 < _dispatchQueue$i.length;\n          i$jscomp$0++\n        ) {\n          _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n          instance = _dispatchListeners$i.instance;\n          currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n    }\n  }\n}\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n  var JSCompiler_inline_result = targetElement[internalEventHandlersKey];\n  void 0 === JSCompiler_inline_result &&\n    (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =\n      new Set());\n  var listenerSetKey = domEventName + \"__bubble\";\n  JSCompiler_inline_result.has(listenerSetKey) ||\n    (addTrappedEventListener(targetElement, domEventName, 2, !1),\n    JSCompiler_inline_result.add(listenerSetKey));\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n  var eventSystemFlags = 0;\n  isCapturePhaseListener && (eventSystemFlags |= 4);\n  addTrappedEventListener(\n    target,\n    domEventName,\n    eventSystemFlags,\n    isCapturePhaseListener\n  );\n}\nvar listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n  if (!rootContainerElement[listeningMarker]) {\n    rootContainerElement[listeningMarker] = !0;\n    allNativeEvents.forEach(function (domEventName) {\n      \"selectionchange\" !== domEventName &&\n        (nonDelegatedEvents.has(domEventName) ||\n          listenToNativeEvent(domEventName, !1, rootContainerElement),\n        listenToNativeEvent(domEventName, !0, rootContainerElement));\n    });\n    var ownerDocument =\n      9 === rootContainerElement.nodeType\n        ? rootContainerElement\n        : rootContainerElement.ownerDocument;\n    null === ownerDocument ||\n      ownerDocument[listeningMarker] ||\n      ((ownerDocument[listeningMarker] = !0),\n      listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n  }\n}\nfunction addTrappedEventListener(\n  targetContainer,\n  domEventName,\n  eventSystemFlags,\n  isCapturePhaseListener\n) {\n  switch (getEventPriority(domEventName)) {\n    case 2:\n      var listenerWrapper = dispatchDiscreteEvent;\n      break;\n    case 8:\n      listenerWrapper = dispatchContinuousEvent;\n      break;\n    default:\n      listenerWrapper = dispatchEvent;\n  }\n  eventSystemFlags = listenerWrapper.bind(\n    null,\n    domEventName,\n    eventSystemFlags,\n    targetContainer\n  );\n  listenerWrapper = void 0;\n  !passiveBrowserEventsSupported ||\n    (\"touchstart\" !== domEventName &&\n      \"touchmove\" !== domEventName &&\n      \"wheel\" !== domEventName) ||\n    (listenerWrapper = !0);\n  isCapturePhaseListener\n    ? void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          capture: !0,\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n    : void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);\n}\nfunction dispatchEventForPluginEventSystem(\n  domEventName,\n  eventSystemFlags,\n  nativeEvent,\n  targetInst$jscomp$0,\n  targetContainer\n) {\n  var ancestorInst = targetInst$jscomp$0;\n  if (\n    0 === (eventSystemFlags & 1) &&\n    0 === (eventSystemFlags & 2) &&\n    null !== targetInst$jscomp$0\n  )\n    a: for (;;) {\n      if (null === targetInst$jscomp$0) return;\n      var nodeTag = targetInst$jscomp$0.tag;\n      if (3 === nodeTag || 4 === nodeTag) {\n        var container = targetInst$jscomp$0.stateNode.containerInfo;\n        if (container === targetContainer) break;\n        if (4 === nodeTag)\n          for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n            var grandTag = nodeTag.tag;\n            if (\n              (3 === grandTag || 4 === grandTag) &&\n              nodeTag.stateNode.containerInfo === targetContainer\n            )\n              return;\n            nodeTag = nodeTag.return;\n          }\n        for (; null !== container; ) {\n          nodeTag = getClosestInstanceFromNode(container);\n          if (null === nodeTag) return;\n          grandTag = nodeTag.tag;\n          if (\n            5 === grandTag ||\n            6 === grandTag ||\n            26 === grandTag ||\n            27 === grandTag\n          ) {\n            targetInst$jscomp$0 = ancestorInst = nodeTag;\n            continue a;\n          }\n          container = container.parentNode;\n        }\n      }\n      targetInst$jscomp$0 = targetInst$jscomp$0.return;\n    }\n  batchedUpdates$1(function () {\n    var targetInst = ancestorInst,\n      nativeEventTarget = getEventTarget(nativeEvent),\n      dispatchQueue = [];\n    a: {\n      var reactName = topLevelEventsToReactNames.get(domEventName);\n      if (void 0 !== reactName) {\n        var SyntheticEventCtor = SyntheticEvent,\n          reactEventType = domEventName;\n        switch (domEventName) {\n          case \"keypress\":\n            if (0 === getEventCharCode(nativeEvent)) break a;\n          case \"keydown\":\n          case \"keyup\":\n            SyntheticEventCtor = SyntheticKeyboardEvent;\n            break;\n          case \"focusin\":\n            reactEventType = \"focus\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"focusout\":\n            reactEventType = \"blur\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"beforeblur\":\n          case \"afterblur\":\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"click\":\n            if (2 === nativeEvent.button) break a;\n          case \"auxclick\":\n          case \"dblclick\":\n          case \"mousedown\":\n          case \"mousemove\":\n          case \"mouseup\":\n          case \"mouseout\":\n          case \"mouseover\":\n          case \"contextmenu\":\n            SyntheticEventCtor = SyntheticMouseEvent;\n            break;\n          case \"drag\":\n          case \"dragend\":\n          case \"dragenter\":\n          case \"dragexit\":\n          case \"dragleave\":\n          case \"dragover\":\n          case \"dragstart\":\n          case \"drop\":\n            SyntheticEventCtor = SyntheticDragEvent;\n            break;\n          case \"touchcancel\":\n          case \"touchend\":\n          case \"touchmove\":\n          case \"touchstart\":\n            SyntheticEventCtor = SyntheticTouchEvent;\n            break;\n          case ANIMATION_END:\n          case ANIMATION_ITERATION:\n          case ANIMATION_START:\n            SyntheticEventCtor = SyntheticAnimationEvent;\n            break;\n          case TRANSITION_END:\n            SyntheticEventCtor = SyntheticTransitionEvent;\n            break;\n          case \"scroll\":\n          case \"scrollend\":\n            SyntheticEventCtor = SyntheticUIEvent;\n            break;\n          case \"wheel\":\n            SyntheticEventCtor = SyntheticWheelEvent;\n            break;\n          case \"copy\":\n          case \"cut\":\n          case \"paste\":\n            SyntheticEventCtor = SyntheticClipboardEvent;\n            break;\n          case \"gotpointercapture\":\n          case \"lostpointercapture\":\n          case \"pointercancel\":\n          case \"pointerdown\":\n          case \"pointermove\":\n          case \"pointerout\":\n          case \"pointerover\":\n          case \"pointerup\":\n            SyntheticEventCtor = SyntheticPointerEvent;\n            break;\n          case \"toggle\":\n          case \"beforetoggle\":\n            SyntheticEventCtor = SyntheticToggleEvent;\n        }\n        var inCapturePhase = 0 !== (eventSystemFlags & 4),\n          accumulateTargetOnly =\n            !inCapturePhase &&\n            (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n          reactEventName = inCapturePhase\n            ? null !== reactName\n              ? reactName + \"Capture\"\n              : null\n            : reactName;\n        inCapturePhase = [];\n        for (\n          var instance = targetInst, lastHostComponent;\n          null !== instance;\n\n        ) {\n          var _instance = instance;\n          lastHostComponent = _instance.stateNode;\n          _instance = _instance.tag;\n          (5 !== _instance && 26 !== _instance && 27 !== _instance) ||\n            null === lastHostComponent ||\n            null === reactEventName ||\n            ((_instance = getListener(instance, reactEventName)),\n            null != _instance &&\n              inCapturePhase.push(\n                createDispatchListener(instance, _instance, lastHostComponent)\n              ));\n          if (accumulateTargetOnly) break;\n          instance = instance.return;\n        }\n        0 < inCapturePhase.length &&\n          ((reactName = new SyntheticEventCtor(\n            reactName,\n            reactEventType,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));\n      }\n    }\n    if (0 === (eventSystemFlags & 7)) {\n      a: {\n        reactName =\n          \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n        SyntheticEventCtor =\n          \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n        if (\n          reactName &&\n          nativeEvent !== currentReplayingEvent &&\n          (reactEventType =\n            nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n          (getClosestInstanceFromNode(reactEventType) ||\n            reactEventType[internalContainerInstanceKey])\n        )\n          break a;\n        if (SyntheticEventCtor || reactName) {\n          reactName =\n            nativeEventTarget.window === nativeEventTarget\n              ? nativeEventTarget\n              : (reactName = nativeEventTarget.ownerDocument)\n                ? reactName.defaultView || reactName.parentWindow\n                : window;\n          if (SyntheticEventCtor) {\n            if (\n              ((reactEventType =\n                nativeEvent.relatedTarget || nativeEvent.toElement),\n              (SyntheticEventCtor = targetInst),\n              (reactEventType = reactEventType\n                ? getClosestInstanceFromNode(reactEventType)\n                : null),\n              null !== reactEventType &&\n                ((accumulateTargetOnly =\n                  getNearestMountedFiber(reactEventType)),\n                (inCapturePhase = reactEventType.tag),\n                reactEventType !== accumulateTargetOnly ||\n                  (5 !== inCapturePhase &&\n                    27 !== inCapturePhase &&\n                    6 !== inCapturePhase)))\n            )\n              reactEventType = null;\n          } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n          if (SyntheticEventCtor !== reactEventType) {\n            inCapturePhase = SyntheticMouseEvent;\n            _instance = \"onMouseLeave\";\n            reactEventName = \"onMouseEnter\";\n            instance = \"mouse\";\n            if (\"pointerout\" === domEventName || \"pointerover\" === domEventName)\n              (inCapturePhase = SyntheticPointerEvent),\n                (_instance = \"onPointerLeave\"),\n                (reactEventName = \"onPointerEnter\"),\n                (instance = \"pointer\");\n            accumulateTargetOnly =\n              null == SyntheticEventCtor\n                ? reactName\n                : getNodeFromInstance(SyntheticEventCtor);\n            lastHostComponent =\n              null == reactEventType\n                ? reactName\n                : getNodeFromInstance(reactEventType);\n            reactName = new inCapturePhase(\n              _instance,\n              instance + \"leave\",\n              SyntheticEventCtor,\n              nativeEvent,\n              nativeEventTarget\n            );\n            reactName.target = accumulateTargetOnly;\n            reactName.relatedTarget = lastHostComponent;\n            _instance = null;\n            getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n              ((inCapturePhase = new inCapturePhase(\n                reactEventName,\n                instance + \"enter\",\n                reactEventType,\n                nativeEvent,\n                nativeEventTarget\n              )),\n              (inCapturePhase.target = lastHostComponent),\n              (inCapturePhase.relatedTarget = accumulateTargetOnly),\n              (_instance = inCapturePhase));\n            accumulateTargetOnly = _instance;\n            if (SyntheticEventCtor && reactEventType)\n              b: {\n                inCapturePhase = SyntheticEventCtor;\n                reactEventName = reactEventType;\n                instance = 0;\n                for (\n                  lastHostComponent = inCapturePhase;\n                  lastHostComponent;\n                  lastHostComponent = getParent(lastHostComponent)\n                )\n                  instance++;\n                lastHostComponent = 0;\n                for (\n                  _instance = reactEventName;\n                  _instance;\n                  _instance = getParent(_instance)\n                )\n                  lastHostComponent++;\n                for (; 0 < instance - lastHostComponent; )\n                  (inCapturePhase = getParent(inCapturePhase)), instance--;\n                for (; 0 < lastHostComponent - instance; )\n                  (reactEventName = getParent(reactEventName)),\n                    lastHostComponent--;\n                for (; instance--; ) {\n                  if (\n                    inCapturePhase === reactEventName ||\n                    (null !== reactEventName &&\n                      inCapturePhase === reactEventName.alternate)\n                  )\n                    break b;\n                  inCapturePhase = getParent(inCapturePhase);\n                  reactEventName = getParent(reactEventName);\n                }\n                inCapturePhase = null;\n              }\n            else inCapturePhase = null;\n            null !== SyntheticEventCtor &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                reactName,\n                SyntheticEventCtor,\n                inCapturePhase,\n                !1\n              );\n            null !== reactEventType &&\n              null !== accumulateTargetOnly &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                accumulateTargetOnly,\n                reactEventType,\n                inCapturePhase,\n                !0\n              );\n          }\n        }\n      }\n      a: {\n        reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n        SyntheticEventCtor =\n          reactName.nodeName && reactName.nodeName.toLowerCase();\n        if (\n          \"select\" === SyntheticEventCtor ||\n          (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n        )\n          var getTargetInstFunc = getTargetInstForChangeEvent;\n        else if (isTextInputElement(reactName))\n          if (isInputEventSupported)\n            getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n          else {\n            getTargetInstFunc = getTargetInstForInputEventPolyfill;\n            var handleEventFunc = handleEventsForInputEventPolyfill;\n          }\n        else\n          (SyntheticEventCtor = reactName.nodeName),\n            !SyntheticEventCtor ||\n            \"input\" !== SyntheticEventCtor.toLowerCase() ||\n            (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n              ? targetInst &&\n                isCustomElement(targetInst.elementType) &&\n                (getTargetInstFunc = getTargetInstForChangeEvent)\n              : (getTargetInstFunc = getTargetInstForClickEvent);\n        if (\n          getTargetInstFunc &&\n          (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n        ) {\n          createAndAccumulateChangeEvent(\n            dispatchQueue,\n            getTargetInstFunc,\n            nativeEvent,\n            nativeEventTarget\n          );\n          break a;\n        }\n        handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);\n        \"focusout\" === domEventName &&\n          targetInst &&\n          \"number\" === reactName.type &&\n          null != targetInst.memoizedProps.value &&\n          setDefaultValue(reactName, \"number\", reactName.value);\n      }\n      handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;\n      switch (domEventName) {\n        case \"focusin\":\n          if (\n            isTextInputElement(handleEventFunc) ||\n            \"true\" === handleEventFunc.contentEditable\n          )\n            (activeElement = handleEventFunc),\n              (activeElementInst = targetInst),\n              (lastSelection = null);\n          break;\n        case \"focusout\":\n          lastSelection = activeElementInst = activeElement = null;\n          break;\n        case \"mousedown\":\n          mouseDown = !0;\n          break;\n        case \"contextmenu\":\n        case \"mouseup\":\n        case \"dragend\":\n          mouseDown = !1;\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n          break;\n        case \"selectionchange\":\n          if (skipSelectionChangeEvent) break;\n        case \"keydown\":\n        case \"keyup\":\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n      }\n      var fallbackData;\n      if (canUseCompositionEvent)\n        b: {\n          switch (domEventName) {\n            case \"compositionstart\":\n              var eventType = \"onCompositionStart\";\n              break b;\n            case \"compositionend\":\n              eventType = \"onCompositionEnd\";\n              break b;\n            case \"compositionupdate\":\n              eventType = \"onCompositionUpdate\";\n              break b;\n          }\n          eventType = void 0;\n        }\n      else\n        isComposing\n          ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n            (eventType = \"onCompositionEnd\")\n          : \"keydown\" === domEventName &&\n            229 === nativeEvent.keyCode &&\n            (eventType = \"onCompositionStart\");\n      eventType &&\n        (useFallbackCompositionData &&\n          \"ko\" !== nativeEvent.locale &&\n          (isComposing || \"onCompositionStart\" !== eventType\n            ? \"onCompositionEnd\" === eventType &&\n              isComposing &&\n              (fallbackData = getData())\n            : ((root = nativeEventTarget),\n              (startText = \"value\" in root ? root.value : root.textContent),\n              (isComposing = !0))),\n        (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),\n        0 < handleEventFunc.length &&\n          ((eventType = new SyntheticCompositionEvent(\n            eventType,\n            domEventName,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),\n          fallbackData\n            ? (eventType.data = fallbackData)\n            : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n              null !== fallbackData && (eventType.data = fallbackData))));\n      if (\n        (fallbackData = canUseTextInputEvent\n          ? getNativeBeforeInputChars(domEventName, nativeEvent)\n          : getFallbackBeforeInputChars(domEventName, nativeEvent))\n      )\n        (eventType = accumulateTwoPhaseListeners(targetInst, \"onBeforeInput\")),\n          0 < eventType.length &&\n            ((handleEventFunc = new SyntheticCompositionEvent(\n              \"onBeforeInput\",\n              \"beforeinput\",\n              null,\n              nativeEvent,\n              nativeEventTarget\n            )),\n            dispatchQueue.push({\n              event: handleEventFunc,\n              listeners: eventType\n            }),\n            (handleEventFunc.data = fallbackData));\n      extractEvents$1(\n        dispatchQueue,\n        domEventName,\n        targetInst,\n        nativeEvent,\n        nativeEventTarget\n      );\n    }\n    processDispatchQueue(dispatchQueue, eventSystemFlags);\n  });\n}\nfunction createDispatchListener(instance, listener, currentTarget) {\n  return {\n    instance: instance,\n    listener: listener,\n    currentTarget: currentTarget\n  };\n}\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n  for (\n    var captureName = reactName + \"Capture\", listeners = [];\n    null !== targetFiber;\n\n  ) {\n    var _instance2 = targetFiber,\n      stateNode = _instance2.stateNode;\n    _instance2 = _instance2.tag;\n    (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n      null === stateNode ||\n      ((_instance2 = getListener(targetFiber, captureName)),\n      null != _instance2 &&\n        listeners.unshift(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ),\n      (_instance2 = getListener(targetFiber, reactName)),\n      null != _instance2 &&\n        listeners.push(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ));\n    if (3 === targetFiber.tag) return listeners;\n    targetFiber = targetFiber.return;\n  }\n  return [];\n}\nfunction getParent(inst) {\n  if (null === inst) return null;\n  do inst = inst.return;\n  while (inst && 5 !== inst.tag && 27 !== inst.tag);\n  return inst ? inst : null;\n}\nfunction accumulateEnterLeaveListenersForEvent(\n  dispatchQueue,\n  event,\n  target,\n  common,\n  inCapturePhase\n) {\n  for (\n    var registrationName = event._reactName, listeners = [];\n    null !== target && target !== common;\n\n  ) {\n    var _instance3 = target,\n      alternate = _instance3.alternate,\n      stateNode = _instance3.stateNode;\n    _instance3 = _instance3.tag;\n    if (null !== alternate && alternate === common) break;\n    (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n      null === stateNode ||\n      ((alternate = stateNode),\n      inCapturePhase\n        ? ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.unshift(\n              createDispatchListener(target, stateNode, alternate)\n            ))\n        : inCapturePhase ||\n          ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.push(\n              createDispatchListener(target, stateNode, alternate)\n            )));\n    target = target.return;\n  }\n  0 !== listeners.length &&\n    dispatchQueue.push({ event: event, listeners: listeners });\n}\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n  NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\nfunction normalizeMarkupForTextOrAttribute(markup) {\n  return (\"string\" === typeof markup ? markup : \"\" + markup)\n    .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n    .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n}\nfunction checkForUnmatchedText(serverText, clientText) {\n  clientText = normalizeMarkupForTextOrAttribute(clientText);\n  return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;\n}\nfunction noop$1() {}\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"children\":\n      \"string\" === typeof value\n        ? \"body\" === tag ||\n          (\"textarea\" === tag && \"\" === value) ||\n          setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          \"body\" !== tag &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"className\":\n      setValueForKnownAttribute(domElement, \"class\", value);\n      break;\n    case \"tabIndex\":\n      setValueForKnownAttribute(domElement, \"tabindex\", value);\n      break;\n    case \"dir\":\n    case \"role\":\n    case \"viewBox\":\n    case \"width\":\n    case \"height\":\n      setValueForKnownAttribute(domElement, key, value);\n      break;\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"data\":\n      if (\"object\" !== tag) {\n        setValueForKnownAttribute(domElement, \"data\", value);\n        break;\n      }\n    case \"src\":\n    case \"href\":\n      if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"action\":\n    case \"formAction\":\n      if (\"function\" === typeof value) {\n        domElement.setAttribute(\n          key,\n          \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n        );\n        break;\n      } else\n        \"function\" === typeof prevValue &&\n          (\"formAction\" === key\n            ? (\"input\" !== tag &&\n                setProp(domElement, tag, \"name\", props.name, props, null),\n              setProp(\n                domElement,\n                tag,\n                \"formEncType\",\n                props.formEncType,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formMethod\",\n                props.formMethod,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formTarget\",\n                props.formTarget,\n                props,\n                null\n              ))\n            : (setProp(domElement, tag, \"encType\", props.encType, props, null),\n              setProp(domElement, tag, \"method\", props.method, props, null),\n              setProp(domElement, tag, \"target\", props.target, props, null)));\n      if (\n        null == value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"multiple\":\n      domElement.multiple =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"muted\":\n      domElement.muted =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"defaultValue\":\n    case \"defaultChecked\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"autoFocus\":\n      break;\n    case \"xlinkHref\":\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"boolean\" === typeof value ||\n        \"symbol\" === typeof value\n      ) {\n        domElement.removeAttribute(\"xlink:href\");\n        break;\n      }\n      key = sanitizeURL(\"\" + value);\n      domElement.setAttributeNS(\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:href\",\n        key\n      );\n      break;\n    case \"contentEditable\":\n    case \"spellCheck\":\n    case \"draggable\":\n    case \"value\":\n    case \"autoReverse\":\n    case \"externalResourcesRequired\":\n    case \"focusable\":\n    case \"preserveAlpha\":\n      null != value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\" + value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"inert\":\n    case \"allowFullScreen\":\n    case \"async\":\n    case \"autoPlay\":\n    case \"controls\":\n    case \"default\":\n    case \"defer\":\n    case \"disabled\":\n    case \"disablePictureInPicture\":\n    case \"disableRemotePlayback\":\n    case \"formNoValidate\":\n    case \"hidden\":\n    case \"loop\":\n    case \"noModule\":\n    case \"noValidate\":\n    case \"open\":\n    case \"playsInline\":\n    case \"readOnly\":\n    case \"required\":\n    case \"reversed\":\n    case \"scoped\":\n    case \"seamless\":\n    case \"itemScope\":\n      value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\")\n        : domElement.removeAttribute(key);\n      break;\n    case \"capture\":\n    case \"download\":\n      !0 === value\n        ? domElement.setAttribute(key, \"\")\n        : !1 !== value &&\n            null != value &&\n            \"function\" !== typeof value &&\n            \"symbol\" !== typeof value\n          ? domElement.setAttribute(key, value)\n          : domElement.removeAttribute(key);\n      break;\n    case \"cols\":\n    case \"rows\":\n    case \"size\":\n    case \"span\":\n      null != value &&\n      \"function\" !== typeof value &&\n      \"symbol\" !== typeof value &&\n      !isNaN(value) &&\n      1 <= value\n        ? domElement.setAttribute(key, value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"rowSpan\":\n    case \"start\":\n      null == value ||\n      \"function\" === typeof value ||\n      \"symbol\" === typeof value ||\n      isNaN(value)\n        ? domElement.removeAttribute(key)\n        : domElement.setAttribute(key, value);\n      break;\n    case \"popover\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      setValueForAttribute(domElement, \"popover\", value);\n      break;\n    case \"xlinkActuate\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:actuate\",\n        value\n      );\n      break;\n    case \"xlinkArcrole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:arcrole\",\n        value\n      );\n      break;\n    case \"xlinkRole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:role\",\n        value\n      );\n      break;\n    case \"xlinkShow\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:show\",\n        value\n      );\n      break;\n    case \"xlinkTitle\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:title\",\n        value\n      );\n      break;\n    case \"xlinkType\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:type\",\n        value\n      );\n      break;\n    case \"xmlBase\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:base\",\n        value\n      );\n      break;\n    case \"xmlLang\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:lang\",\n        value\n      );\n      break;\n    case \"xmlSpace\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:space\",\n        value\n      );\n      break;\n    case \"is\":\n      setValueForAttribute(domElement, \"is\", value);\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (\n        !(2 < key.length) ||\n        (\"o\" !== key[0] && \"O\" !== key[0]) ||\n        (\"n\" !== key[1] && \"N\" !== key[1])\n      )\n        (key = aliases.get(key) || key),\n          setValueForAttribute(domElement, key, value);\n  }\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"children\":\n      \"string\" === typeof value\n        ? setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (!registrationNameDependencies.hasOwnProperty(key))\n        a: {\n          if (\n            \"o\" === key[0] &&\n            \"n\" === key[1] &&\n            ((props = key.endsWith(\"Capture\")),\n            (tag = key.slice(2, props ? key.length - 7 : void 0)),\n            (prevValue = domElement[internalPropsKey] || null),\n            (prevValue = null != prevValue ? prevValue[key] : null),\n            \"function\" === typeof prevValue &&\n              domElement.removeEventListener(tag, prevValue, props),\n            \"function\" === typeof value)\n          ) {\n            \"function\" !== typeof prevValue &&\n              null !== prevValue &&\n              (key in domElement\n                ? (domElement[key] = null)\n                : domElement.hasAttribute(key) &&\n                  domElement.removeAttribute(key));\n            domElement.addEventListener(tag, value, props);\n            break a;\n          }\n          key in domElement\n            ? (domElement[key] = value)\n            : !0 === value\n              ? domElement.setAttribute(key, \"\")\n              : setValueForAttribute(domElement, key, value);\n        }\n  }\n}\nfunction setInitialProperties(domElement, tag, props) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"img\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      var hasSrc = !1,\n        hasSrcSet = !1,\n        propKey;\n      for (propKey in props)\n        if (props.hasOwnProperty(propKey)) {\n          var propValue = props[propKey];\n          if (null != propValue)\n            switch (propKey) {\n              case \"src\":\n                hasSrc = !0;\n                break;\n              case \"srcSet\":\n                hasSrcSet = !0;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                throw Error(formatProdErrorMessage(137, tag));\n              default:\n                setProp(domElement, tag, propKey, propValue, props, null);\n            }\n        }\n      hasSrcSet &&\n        setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n      hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n      return;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      var defaultValue = (propKey = propValue = hasSrcSet = null),\n        checked = null,\n        defaultChecked = null;\n      for (hasSrc in props)\n        if (props.hasOwnProperty(hasSrc)) {\n          var propValue$188 = props[hasSrc];\n          if (null != propValue$188)\n            switch (hasSrc) {\n              case \"name\":\n                hasSrcSet = propValue$188;\n                break;\n              case \"type\":\n                propValue = propValue$188;\n                break;\n              case \"checked\":\n                checked = propValue$188;\n                break;\n              case \"defaultChecked\":\n                defaultChecked = propValue$188;\n                break;\n              case \"value\":\n                propKey = propValue$188;\n                break;\n              case \"defaultValue\":\n                defaultValue = propValue$188;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                if (null != propValue$188)\n                  throw Error(formatProdErrorMessage(137, tag));\n                break;\n              default:\n                setProp(domElement, tag, hasSrc, propValue$188, props, null);\n            }\n        }\n      initInput(\n        domElement,\n        propKey,\n        defaultValue,\n        checked,\n        defaultChecked,\n        propValue,\n        hasSrcSet,\n        !1\n      );\n      track(domElement);\n      return;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      hasSrc = propValue = propKey = null;\n      for (hasSrcSet in props)\n        if (\n          props.hasOwnProperty(hasSrcSet) &&\n          ((defaultValue = props[hasSrcSet]), null != defaultValue)\n        )\n          switch (hasSrcSet) {\n            case \"value\":\n              propKey = defaultValue;\n              break;\n            case \"defaultValue\":\n              propValue = defaultValue;\n              break;\n            case \"multiple\":\n              hasSrc = defaultValue;\n            default:\n              setProp(domElement, tag, hasSrcSet, defaultValue, props, null);\n          }\n      tag = propKey;\n      props = propValue;\n      domElement.multiple = !!hasSrc;\n      null != tag\n        ? updateOptions(domElement, !!hasSrc, tag, !1)\n        : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n      return;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      propKey = hasSrcSet = hasSrc = null;\n      for (propValue in props)\n        if (\n          props.hasOwnProperty(propValue) &&\n          ((defaultValue = props[propValue]), null != defaultValue)\n        )\n          switch (propValue) {\n            case \"value\":\n              hasSrc = defaultValue;\n              break;\n            case \"defaultValue\":\n              hasSrcSet = defaultValue;\n              break;\n            case \"children\":\n              propKey = defaultValue;\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != defaultValue) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              setProp(domElement, tag, propValue, defaultValue, props, null);\n          }\n      initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n      track(domElement);\n      return;\n    case \"option\":\n      for (checked in props)\n        if (\n          props.hasOwnProperty(checked) &&\n          ((hasSrc = props[checked]), null != hasSrc)\n        )\n          switch (checked) {\n            case \"selected\":\n              domElement.selected =\n                hasSrc &&\n                \"function\" !== typeof hasSrc &&\n                \"symbol\" !== typeof hasSrc;\n              break;\n            default:\n              setProp(domElement, tag, checked, hasSrc, props, null);\n          }\n      return;\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      listenToNonDelegatedEvent(\"cancel\", domElement);\n      listenToNonDelegatedEvent(\"close\", domElement);\n      break;\n    case \"iframe\":\n    case \"object\":\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n        listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n      break;\n    case \"image\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      break;\n    case \"embed\":\n    case \"source\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", domElement),\n        listenToNonDelegatedEvent(\"load\", domElement);\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (defaultChecked in props)\n        if (\n          props.hasOwnProperty(defaultChecked) &&\n          ((hasSrc = props[defaultChecked]), null != hasSrc)\n        )\n          switch (defaultChecked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              throw Error(formatProdErrorMessage(137, tag));\n            default:\n              setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (propValue$188 in props)\n          props.hasOwnProperty(propValue$188) &&\n            ((hasSrc = props[propValue$188]),\n            void 0 !== hasSrc &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propValue$188,\n                hasSrc,\n                props,\n                void 0\n              ));\n        return;\n      }\n  }\n  for (defaultValue in props)\n    props.hasOwnProperty(defaultValue) &&\n      ((hasSrc = props[defaultValue]),\n      null != hasSrc &&\n        setProp(domElement, tag, defaultValue, hasSrc, props, null));\n}\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"input\":\n      var name = null,\n        type = null,\n        value = null,\n        defaultValue = null,\n        lastDefaultValue = null,\n        checked = null,\n        defaultChecked = null;\n      for (propKey in lastProps) {\n        var lastProp = lastProps[propKey];\n        if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n          switch (propKey) {\n            case \"checked\":\n              break;\n            case \"value\":\n              break;\n            case \"defaultValue\":\n              lastDefaultValue = lastProp;\n            default:\n              nextProps.hasOwnProperty(propKey) ||\n                setProp(domElement, tag, propKey, null, nextProps, lastProp);\n          }\n      }\n      for (var propKey$205 in nextProps) {\n        var propKey = nextProps[propKey$205];\n        lastProp = lastProps[propKey$205];\n        if (\n          nextProps.hasOwnProperty(propKey$205) &&\n          (null != propKey || null != lastProp)\n        )\n          switch (propKey$205) {\n            case \"type\":\n              type = propKey;\n              break;\n            case \"name\":\n              name = propKey;\n              break;\n            case \"checked\":\n              checked = propKey;\n              break;\n            case \"defaultChecked\":\n              defaultChecked = propKey;\n              break;\n            case \"value\":\n              value = propKey;\n              break;\n            case \"defaultValue\":\n              defaultValue = propKey;\n              break;\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              propKey !== lastProp &&\n                setProp(\n                  domElement,\n                  tag,\n                  propKey$205,\n                  propKey,\n                  nextProps,\n                  lastProp\n                );\n          }\n      }\n      updateInput(\n        domElement,\n        value,\n        defaultValue,\n        lastDefaultValue,\n        checked,\n        defaultChecked,\n        type,\n        name\n      );\n      return;\n    case \"select\":\n      propKey = value = defaultValue = propKey$205 = null;\n      for (type in lastProps)\n        if (\n          ((lastDefaultValue = lastProps[type]),\n          lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n        )\n          switch (type) {\n            case \"value\":\n              break;\n            case \"multiple\":\n              propKey = lastDefaultValue;\n            default:\n              nextProps.hasOwnProperty(type) ||\n                setProp(\n                  domElement,\n                  tag,\n                  type,\n                  null,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      for (name in nextProps)\n        if (\n          ((type = nextProps[name]),\n          (lastDefaultValue = lastProps[name]),\n          nextProps.hasOwnProperty(name) &&\n            (null != type || null != lastDefaultValue))\n        )\n          switch (name) {\n            case \"value\":\n              propKey$205 = type;\n              break;\n            case \"defaultValue\":\n              defaultValue = type;\n              break;\n            case \"multiple\":\n              value = type;\n            default:\n              type !== lastDefaultValue &&\n                setProp(\n                  domElement,\n                  tag,\n                  name,\n                  type,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      tag = defaultValue;\n      lastProps = value;\n      nextProps = propKey;\n      null != propKey$205\n        ? updateOptions(domElement, !!lastProps, propKey$205, !1)\n        : !!nextProps !== !!lastProps &&\n          (null != tag\n            ? updateOptions(domElement, !!lastProps, tag, !0)\n            : updateOptions(domElement, !!lastProps, lastProps ? [] : \"\", !1));\n      return;\n    case \"textarea\":\n      propKey = propKey$205 = null;\n      for (defaultValue in lastProps)\n        if (\n          ((name = lastProps[defaultValue]),\n          lastProps.hasOwnProperty(defaultValue) &&\n            null != name &&\n            !nextProps.hasOwnProperty(defaultValue))\n        )\n          switch (defaultValue) {\n            case \"value\":\n              break;\n            case \"children\":\n              break;\n            default:\n              setProp(domElement, tag, defaultValue, null, nextProps, name);\n          }\n      for (value in nextProps)\n        if (\n          ((name = nextProps[value]),\n          (type = lastProps[value]),\n          nextProps.hasOwnProperty(value) && (null != name || null != type))\n        )\n          switch (value) {\n            case \"value\":\n              propKey$205 = name;\n              break;\n            case \"defaultValue\":\n              propKey = name;\n              break;\n            case \"children\":\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != name) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              name !== type &&\n                setProp(domElement, tag, value, name, nextProps, type);\n          }\n      updateTextarea(domElement, propKey$205, propKey);\n      return;\n    case \"option\":\n      for (var propKey$221 in lastProps)\n        if (\n          ((propKey$205 = lastProps[propKey$221]),\n          lastProps.hasOwnProperty(propKey$221) &&\n            null != propKey$205 &&\n            !nextProps.hasOwnProperty(propKey$221))\n        )\n          switch (propKey$221) {\n            case \"selected\":\n              domElement.selected = !1;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                propKey$221,\n                null,\n                nextProps,\n                propKey$205\n              );\n          }\n      for (lastDefaultValue in nextProps)\n        if (\n          ((propKey$205 = nextProps[lastDefaultValue]),\n          (propKey = lastProps[lastDefaultValue]),\n          nextProps.hasOwnProperty(lastDefaultValue) &&\n            propKey$205 !== propKey &&\n            (null != propKey$205 || null != propKey))\n        )\n          switch (lastDefaultValue) {\n            case \"selected\":\n              domElement.selected =\n                propKey$205 &&\n                \"function\" !== typeof propKey$205 &&\n                \"symbol\" !== typeof propKey$205;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                lastDefaultValue,\n                propKey$205,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    case \"img\":\n    case \"link\":\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"embed\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"source\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (var propKey$226 in lastProps)\n        (propKey$205 = lastProps[propKey$226]),\n          lastProps.hasOwnProperty(propKey$226) &&\n            null != propKey$205 &&\n            !nextProps.hasOwnProperty(propKey$226) &&\n            setProp(domElement, tag, propKey$226, null, nextProps, propKey$205);\n      for (checked in nextProps)\n        if (\n          ((propKey$205 = nextProps[checked]),\n          (propKey = lastProps[checked]),\n          nextProps.hasOwnProperty(checked) &&\n            propKey$205 !== propKey &&\n            (null != propKey$205 || null != propKey))\n        )\n          switch (checked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey$205)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                checked,\n                propKey$205,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (var propKey$231 in lastProps)\n          (propKey$205 = lastProps[propKey$231]),\n            lastProps.hasOwnProperty(propKey$231) &&\n              void 0 !== propKey$205 &&\n              !nextProps.hasOwnProperty(propKey$231) &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propKey$231,\n                void 0,\n                nextProps,\n                propKey$205\n              );\n        for (defaultChecked in nextProps)\n          (propKey$205 = nextProps[defaultChecked]),\n            (propKey = lastProps[defaultChecked]),\n            !nextProps.hasOwnProperty(defaultChecked) ||\n              propKey$205 === propKey ||\n              (void 0 === propKey$205 && void 0 === propKey) ||\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                defaultChecked,\n                propKey$205,\n                nextProps,\n                propKey\n              );\n        return;\n      }\n  }\n  for (var propKey$236 in lastProps)\n    (propKey$205 = lastProps[propKey$236]),\n      lastProps.hasOwnProperty(propKey$236) &&\n        null != propKey$205 &&\n        !nextProps.hasOwnProperty(propKey$236) &&\n        setProp(domElement, tag, propKey$236, null, nextProps, propKey$205);\n  for (lastProp in nextProps)\n    (propKey$205 = nextProps[lastProp]),\n      (propKey = lastProps[lastProp]),\n      !nextProps.hasOwnProperty(lastProp) ||\n        propKey$205 === propKey ||\n        (null == propKey$205 && null == propKey) ||\n        setProp(domElement, tag, lastProp, propKey$205, nextProps, propKey);\n}\nvar eventsEnabled = null,\n  selectionInformation = null;\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n  return 9 === rootContainerElement.nodeType\n    ? rootContainerElement\n    : rootContainerElement.ownerDocument;\n}\nfunction getOwnHostContext(namespaceURI) {\n  switch (namespaceURI) {\n    case \"http://www.w3.org/2000/svg\":\n      return 1;\n    case \"http://www.w3.org/1998/Math/MathML\":\n      return 2;\n    default:\n      return 0;\n  }\n}\nfunction getChildHostContextProd(parentNamespace, type) {\n  if (0 === parentNamespace)\n    switch (type) {\n      case \"svg\":\n        return 1;\n      case \"math\":\n        return 2;\n      default:\n        return 0;\n    }\n  return 1 === parentNamespace && \"foreignObject\" === type\n    ? 0\n    : parentNamespace;\n}\nfunction shouldSetTextContent(type, props) {\n  return (\n    \"textarea\" === type ||\n    \"noscript\" === type ||\n    \"string\" === typeof props.children ||\n    \"number\" === typeof props.children ||\n    \"bigint\" === typeof props.children ||\n    (\"object\" === typeof props.dangerouslySetInnerHTML &&\n      null !== props.dangerouslySetInnerHTML &&\n      null != props.dangerouslySetInnerHTML.__html)\n  );\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n  var event = window.event;\n  if (event && \"popstate\" === event.type) {\n    if (event === currentPopstateTransitionEvent) return !1;\n    currentPopstateTransitionEvent = event;\n    return !0;\n  }\n  currentPopstateTransitionEvent = null;\n  return !1;\n}\nvar scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n  cancelTimeout = \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n  localPromise = \"function\" === typeof Promise ? Promise : void 0,\n  scheduleMicrotask =\n    \"function\" === typeof queueMicrotask\n      ? queueMicrotask\n      : \"undefined\" !== typeof localPromise\n        ? function (callback) {\n            return localPromise\n              .resolve(null)\n              .then(callback)\n              .catch(handleErrorInNextTick);\n          }\n        : scheduleTimeout;\nfunction handleErrorInNextTick(error) {\n  setTimeout(function () {\n    throw error;\n  });\n}\nfunction isSingletonScope(type) {\n  return \"head\" === type;\n}\nfunction clearSuspenseBoundary(parentInstance, suspenseInstance) {\n  var node = suspenseInstance,\n    possiblePreambleContribution = 0,\n    depth = 0;\n  do {\n    var nextNode = node.nextSibling;\n    parentInstance.removeChild(node);\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node)) {\n        if (\n          0 < possiblePreambleContribution &&\n          8 > possiblePreambleContribution\n        ) {\n          node = possiblePreambleContribution;\n          var ownerDocument = parentInstance.ownerDocument;\n          node & 1 && releaseSingletonInstance(ownerDocument.documentElement);\n          node & 2 && releaseSingletonInstance(ownerDocument.body);\n          if (node & 4)\n            for (\n              node = ownerDocument.head,\n                releaseSingletonInstance(node),\n                ownerDocument = node.firstChild;\n              ownerDocument;\n\n            ) {\n              var nextNode$jscomp$0 = ownerDocument.nextSibling,\n                nodeName = ownerDocument.nodeName;\n              ownerDocument[internalHoistableMarker] ||\n                \"SCRIPT\" === nodeName ||\n                \"STYLE\" === nodeName ||\n                (\"LINK\" === nodeName &&\n                  \"stylesheet\" === ownerDocument.rel.toLowerCase()) ||\n                node.removeChild(ownerDocument);\n              ownerDocument = nextNode$jscomp$0;\n            }\n        }\n        if (0 === depth) {\n          parentInstance.removeChild(nextNode);\n          retryIfBlockedOn(suspenseInstance);\n          return;\n        }\n        depth--;\n      } else\n        \"$\" === node || \"$?\" === node || \"$!\" === node\n          ? depth++\n          : (possiblePreambleContribution = node.charCodeAt(0) - 48);\n    else possiblePreambleContribution = 0;\n    node = nextNode;\n  } while (node);\n  retryIfBlockedOn(suspenseInstance);\n}\nfunction clearContainerSparingly(container) {\n  var nextNode = container.firstChild;\n  nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n  for (; nextNode; ) {\n    var node = nextNode;\n    nextNode = nextNode.nextSibling;\n    switch (node.nodeName) {\n      case \"HTML\":\n      case \"HEAD\":\n      case \"BODY\":\n        clearContainerSparingly(node);\n        detachDeletedInstance(node);\n        continue;\n      case \"SCRIPT\":\n      case \"STYLE\":\n        continue;\n      case \"LINK\":\n        if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n    }\n    container.removeChild(node);\n  }\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n  for (; 1 === instance.nodeType; ) {\n    var anyProps = props;\n    if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n      if (\n        !inRootOrSingleton &&\n        (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n      )\n        break;\n    } else if (!inRootOrSingleton)\n      if (\"input\" === type && \"hidden\" === instance.type) {\n        var name = null == anyProps.name ? null : \"\" + anyProps.name;\n        if (\n          \"hidden\" === anyProps.type &&\n          instance.getAttribute(\"name\") === name\n        )\n          return instance;\n      } else return instance;\n    else if (!instance[internalHoistableMarker])\n      switch (type) {\n        case \"meta\":\n          if (!instance.hasAttribute(\"itemprop\")) break;\n          return instance;\n        case \"link\":\n          name = instance.getAttribute(\"rel\");\n          if (\"stylesheet\" === name && instance.hasAttribute(\"data-precedence\"))\n            break;\n          else if (\n            name !== anyProps.rel ||\n            instance.getAttribute(\"href\") !==\n              (null == anyProps.href || \"\" === anyProps.href\n                ? null\n                : anyProps.href) ||\n            instance.getAttribute(\"crossorigin\") !==\n              (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||\n            instance.getAttribute(\"title\") !==\n              (null == anyProps.title ? null : anyProps.title)\n          )\n            break;\n          return instance;\n        case \"style\":\n          if (instance.hasAttribute(\"data-precedence\")) break;\n          return instance;\n        case \"script\":\n          name = instance.getAttribute(\"src\");\n          if (\n            (name !== (null == anyProps.src ? null : anyProps.src) ||\n              instance.getAttribute(\"type\") !==\n                (null == anyProps.type ? null : anyProps.type) ||\n              instance.getAttribute(\"crossorigin\") !==\n                (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&\n            name &&\n            instance.hasAttribute(\"async\") &&\n            !instance.hasAttribute(\"itemprop\")\n          )\n            break;\n          return instance;\n        default:\n          return instance;\n      }\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) break;\n  }\n  return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n  if (\"\" === text) return null;\n  for (; 3 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction isSuspenseInstanceFallback(instance) {\n  return (\n    \"$!\" === instance.data ||\n    (\"$?\" === instance.data && \"complete\" === instance.ownerDocument.readyState)\n  );\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n  var ownerDocument = instance.ownerDocument;\n  if (\"$?\" !== instance.data || \"complete\" === ownerDocument.readyState)\n    callback();\n  else {\n    var listener = function () {\n      callback();\n      ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n    };\n    ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n    instance._reactRetry = listener;\n  }\n}\nfunction getNextHydratable(node) {\n  for (; null != node; node = node.nextSibling) {\n    var nodeType = node.nodeType;\n    if (1 === nodeType || 3 === nodeType) break;\n    if (8 === nodeType) {\n      nodeType = node.data;\n      if (\n        \"$\" === nodeType ||\n        \"$!\" === nodeType ||\n        \"$?\" === nodeType ||\n        \"F!\" === nodeType ||\n        \"F\" === nodeType\n      )\n        break;\n      if (\"/$\" === nodeType) return null;\n    }\n  }\n  return node;\n}\nvar previousHydratableOnEnteringScopedSingleton = null;\nfunction getParentSuspenseInstance(targetInstance) {\n  targetInstance = targetInstance.previousSibling;\n  for (var depth = 0; targetInstance; ) {\n    if (8 === targetInstance.nodeType) {\n      var data = targetInstance.data;\n      if (\"$\" === data || \"$!\" === data || \"$?\" === data) {\n        if (0 === depth) return targetInstance;\n        depth--;\n      } else \"/$\" === data && depth++;\n    }\n    targetInstance = targetInstance.previousSibling;\n  }\n  return null;\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance) {\n  props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n  switch (type) {\n    case \"html\":\n      type = props.documentElement;\n      if (!type) throw Error(formatProdErrorMessage(452));\n      return type;\n    case \"head\":\n      type = props.head;\n      if (!type) throw Error(formatProdErrorMessage(453));\n      return type;\n    case \"body\":\n      type = props.body;\n      if (!type) throw Error(formatProdErrorMessage(454));\n      return type;\n    default:\n      throw Error(formatProdErrorMessage(451));\n  }\n}\nfunction releaseSingletonInstance(instance) {\n  for (var attributes = instance.attributes; attributes.length; )\n    instance.removeAttributeNode(attributes[0]);\n  detachDeletedInstance(instance);\n}\nvar preloadPropsMap = new Map(),\n  preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n  return \"function\" === typeof container.getRootNode\n    ? container.getRootNode()\n    : 9 === container.nodeType\n      ? container\n      : container.ownerDocument;\n}\nvar previousDispatcher = ReactDOMSharedInternals.d;\nReactDOMSharedInternals.d = {\n  f: flushSyncWork,\n  r: requestFormReset,\n  D: prefetchDNS,\n  C: preconnect,\n  L: preload,\n  m: preloadModule,\n  X: preinitScript,\n  S: preinitStyle,\n  M: preinitModuleScript\n};\nfunction flushSyncWork() {\n  var previousWasRendering = previousDispatcher.f(),\n    wasRendering = flushSyncWork$1();\n  return previousWasRendering || wasRendering;\n}\nfunction requestFormReset(form) {\n  var formInst = getInstanceFromNode(form);\n  null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n    ? requestFormReset$1(formInst)\n    : previousDispatcher.r(form);\n}\nvar globalDocument = \"undefined\" === typeof document ? null : document;\nfunction preconnectAs(rel, href, crossOrigin) {\n  var ownerDocument = globalDocument;\n  if (ownerDocument && \"string\" === typeof href && href) {\n    var limitedEscapedHref =\n      escapeSelectorAttributeValueInsideDoubleQuotes(href);\n    limitedEscapedHref =\n      'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n    \"string\" === typeof crossOrigin &&\n      (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n    preconnectsSet.has(limitedEscapedHref) ||\n      (preconnectsSet.add(limitedEscapedHref),\n      (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n      null === ownerDocument.querySelector(limitedEscapedHref) &&\n        ((href = ownerDocument.createElement(\"link\")),\n        setInitialProperties(href, \"link\", rel),\n        markNodeAsHoistable(href),\n        ownerDocument.head.appendChild(href)));\n  }\n}\nfunction prefetchDNS(href) {\n  previousDispatcher.D(href);\n  preconnectAs(\"dns-prefetch\", href, null);\n}\nfunction preconnect(href, crossOrigin) {\n  previousDispatcher.C(href, crossOrigin);\n  preconnectAs(\"preconnect\", href, crossOrigin);\n}\nfunction preload(href, as, options) {\n  previousDispatcher.L(href, as, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href && as) {\n    var preloadSelector =\n      'link[rel=\"preload\"][as=\"' +\n      escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n      '\"]';\n    \"image\" === as\n      ? options && options.imageSrcSet\n        ? ((preloadSelector +=\n            '[imagesrcset=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(\n              options.imageSrcSet\n            ) +\n            '\"]'),\n          \"string\" === typeof options.imageSizes &&\n            (preloadSelector +=\n              '[imagesizes=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                options.imageSizes\n              ) +\n              '\"]'))\n        : (preloadSelector +=\n            '[href=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n            '\"]')\n      : (preloadSelector +=\n          '[href=\"' +\n          escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n          '\"]');\n    var key = preloadSelector;\n    switch (as) {\n      case \"style\":\n        key = getStyleKey(href);\n        break;\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    preloadPropsMap.has(key) ||\n      ((href = assign(\n        {\n          rel: \"preload\",\n          href:\n            \"image\" === as && options && options.imageSrcSet ? void 0 : href,\n          as: as\n        },\n        options\n      )),\n      preloadPropsMap.set(key, href),\n      null !== ownerDocument.querySelector(preloadSelector) ||\n        (\"style\" === as &&\n          ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||\n        (\"script\" === as &&\n          ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n        ((as = ownerDocument.createElement(\"link\")),\n        setInitialProperties(as, \"link\", href),\n        markNodeAsHoistable(as),\n        ownerDocument.head.appendChild(as)));\n  }\n}\nfunction preloadModule(href, options) {\n  previousDispatcher.m(href, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var as = options && \"string\" === typeof options.as ? options.as : \"script\",\n      preloadSelector =\n        'link[rel=\"modulepreload\"][as=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n        '\"][href=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n        '\"]',\n      key = preloadSelector;\n    switch (as) {\n      case \"audioworklet\":\n      case \"paintworklet\":\n      case \"serviceworker\":\n      case \"sharedworker\":\n      case \"worker\":\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    if (\n      !preloadPropsMap.has(key) &&\n      ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n      preloadPropsMap.set(key, href),\n      null === ownerDocument.querySelector(preloadSelector))\n    ) {\n      switch (as) {\n        case \"audioworklet\":\n        case \"paintworklet\":\n        case \"serviceworker\":\n        case \"sharedworker\":\n        case \"worker\":\n        case \"script\":\n          if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n            return;\n      }\n      as = ownerDocument.createElement(\"link\");\n      setInitialProperties(as, \"link\", href);\n      markNodeAsHoistable(as);\n      ownerDocument.head.appendChild(as);\n    }\n  }\n}\nfunction preinitStyle(href, precedence, options) {\n  previousDispatcher.S(href, precedence, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n      key = getStyleKey(href);\n    precedence = precedence || \"default\";\n    var resource = styles.get(key);\n    if (!resource) {\n      var state = { loading: 0, preload: null };\n      if (\n        (resource = ownerDocument.querySelector(\n          getStylesheetSelectorFromKey(key)\n        ))\n      )\n        state.loading = 5;\n      else {\n        href = assign(\n          { rel: \"stylesheet\", href: href, \"data-precedence\": precedence },\n          options\n        );\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForStylesheet(href, options);\n        var link = (resource = ownerDocument.createElement(\"link\"));\n        markNodeAsHoistable(link);\n        setInitialProperties(link, \"link\", href);\n        link._p = new Promise(function (resolve, reject) {\n          link.onload = resolve;\n          link.onerror = reject;\n        });\n        link.addEventListener(\"load\", function () {\n          state.loading |= 1;\n        });\n        link.addEventListener(\"error\", function () {\n          state.loading |= 2;\n        });\n        state.loading |= 4;\n        insertStylesheet(resource, precedence, ownerDocument);\n      }\n      resource = {\n        type: \"stylesheet\",\n        instance: resource,\n        count: 1,\n        state: state\n      };\n      styles.set(key, resource);\n    }\n  }\n}\nfunction preinitScript(src, options) {\n  previousDispatcher.X(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0 }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction preinitModuleScript(src, options) {\n  previousDispatcher.M(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction getResource(type, currentProps, pendingProps, currentResource) {\n  var JSCompiler_inline_result = (JSCompiler_inline_result =\n    rootInstanceStackCursor.current)\n    ? getHoistableRoot(JSCompiler_inline_result)\n    : null;\n  if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return null;\n    case \"style\":\n      return \"string\" === typeof pendingProps.precedence &&\n        \"string\" === typeof pendingProps.href\n        ? ((currentProps = getStyleKey(pendingProps.href)),\n          (pendingProps = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles),\n          (currentResource = pendingProps.get(currentProps)),\n          currentResource ||\n            ((currentResource = {\n              type: \"style\",\n              instance: null,\n              count: 0,\n              state: null\n            }),\n            pendingProps.set(currentProps, currentResource)),\n          currentResource)\n        : { type: \"void\", instance: null, count: 0, state: null };\n    case \"link\":\n      if (\n        \"stylesheet\" === pendingProps.rel &&\n        \"string\" === typeof pendingProps.href &&\n        \"string\" === typeof pendingProps.precedence\n      ) {\n        type = getStyleKey(pendingProps.href);\n        var styles$244 = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles,\n          resource$245 = styles$244.get(type);\n        resource$245 ||\n          ((JSCompiler_inline_result =\n            JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n          (resource$245 = {\n            type: \"stylesheet\",\n            instance: null,\n            count: 0,\n            state: { loading: 0, preload: null }\n          }),\n          styles$244.set(type, resource$245),\n          (styles$244 = JSCompiler_inline_result.querySelector(\n            getStylesheetSelectorFromKey(type)\n          )) &&\n            !styles$244._p &&\n            ((resource$245.instance = styles$244),\n            (resource$245.state.loading = 5)),\n          preloadPropsMap.has(type) ||\n            ((pendingProps = {\n              rel: \"preload\",\n              as: \"style\",\n              href: pendingProps.href,\n              crossOrigin: pendingProps.crossOrigin,\n              integrity: pendingProps.integrity,\n              media: pendingProps.media,\n              hrefLang: pendingProps.hrefLang,\n              referrerPolicy: pendingProps.referrerPolicy\n            }),\n            preloadPropsMap.set(type, pendingProps),\n            styles$244 ||\n              preloadStylesheet(\n                JSCompiler_inline_result,\n                type,\n                pendingProps,\n                resource$245.state\n              )));\n        if (currentProps && null === currentResource)\n          throw Error(formatProdErrorMessage(528, \"\"));\n        return resource$245;\n      }\n      if (currentProps && null !== currentResource)\n        throw Error(formatProdErrorMessage(529, \"\"));\n      return null;\n    case \"script\":\n      return (\n        (currentProps = pendingProps.async),\n        (pendingProps = pendingProps.src),\n        \"string\" === typeof pendingProps &&\n        currentProps &&\n        \"function\" !== typeof currentProps &&\n        \"symbol\" !== typeof currentProps\n          ? ((currentProps = getScriptKey(pendingProps)),\n            (pendingProps = getResourcesFromRoot(\n              JSCompiler_inline_result\n            ).hoistableScripts),\n            (currentResource = pendingProps.get(currentProps)),\n            currentResource ||\n              ((currentResource = {\n                type: \"script\",\n                instance: null,\n                count: 0,\n                state: null\n              }),\n              pendingProps.set(currentProps, currentResource)),\n            currentResource)\n          : { type: \"void\", instance: null, count: 0, state: null }\n      );\n    default:\n      throw Error(formatProdErrorMessage(444, type));\n  }\n}\nfunction getStyleKey(href) {\n  return 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"';\n}\nfunction getStylesheetSelectorFromKey(key) {\n  return 'link[rel=\"stylesheet\"][' + key + \"]\";\n}\nfunction stylesheetPropsFromRawProps(rawProps) {\n  return assign({}, rawProps, {\n    \"data-precedence\": rawProps.precedence,\n    precedence: null\n  });\n}\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n  ownerDocument.querySelector('link[rel=\"preload\"][as=\"style\"][' + key + \"]\")\n    ? (state.loading = 1)\n    : ((key = ownerDocument.createElement(\"link\")),\n      (state.preload = key),\n      key.addEventListener(\"load\", function () {\n        return (state.loading |= 1);\n      }),\n      key.addEventListener(\"error\", function () {\n        return (state.loading |= 2);\n      }),\n      setInitialProperties(key, \"link\", preloadProps),\n      markNodeAsHoistable(key),\n      ownerDocument.head.appendChild(key));\n}\nfunction getScriptKey(src) {\n  return '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]';\n}\nfunction getScriptSelectorFromKey(key) {\n  return \"script[async]\" + key;\n}\nfunction acquireResource(hoistableRoot, resource, props) {\n  resource.count++;\n  if (null === resource.instance)\n    switch (resource.type) {\n      case \"style\":\n        var instance = hoistableRoot.querySelector(\n          'style[data-href~=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n            '\"]'\n        );\n        if (instance)\n          return (\n            (resource.instance = instance),\n            markNodeAsHoistable(instance),\n            instance\n          );\n        var styleProps = assign({}, props, {\n          \"data-href\": props.href,\n          \"data-precedence\": props.precedence,\n          href: null,\n          precedence: null\n        });\n        instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(\n          \"style\"\n        );\n        markNodeAsHoistable(instance);\n        setInitialProperties(instance, \"style\", styleProps);\n        insertStylesheet(instance, props.precedence, hoistableRoot);\n        return (resource.instance = instance);\n      case \"stylesheet\":\n        styleProps = getStyleKey(props.href);\n        var instance$250 = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(styleProps)\n        );\n        if (instance$250)\n          return (\n            (resource.state.loading |= 4),\n            (resource.instance = instance$250),\n            markNodeAsHoistable(instance$250),\n            instance$250\n          );\n        instance = stylesheetPropsFromRawProps(props);\n        (styleProps = preloadPropsMap.get(styleProps)) &&\n          adoptPreloadPropsForStylesheet(instance, styleProps);\n        instance$250 = (\n          hoistableRoot.ownerDocument || hoistableRoot\n        ).createElement(\"link\");\n        markNodeAsHoistable(instance$250);\n        var linkInstance = instance$250;\n        linkInstance._p = new Promise(function (resolve, reject) {\n          linkInstance.onload = resolve;\n          linkInstance.onerror = reject;\n        });\n        setInitialProperties(instance$250, \"link\", instance);\n        resource.state.loading |= 4;\n        insertStylesheet(instance$250, props.precedence, hoistableRoot);\n        return (resource.instance = instance$250);\n      case \"script\":\n        instance$250 = getScriptKey(props.src);\n        if (\n          (styleProps = hoistableRoot.querySelector(\n            getScriptSelectorFromKey(instance$250)\n          ))\n        )\n          return (\n            (resource.instance = styleProps),\n            markNodeAsHoistable(styleProps),\n            styleProps\n          );\n        instance = props;\n        if ((styleProps = preloadPropsMap.get(instance$250)))\n          (instance = assign({}, props)),\n            adoptPreloadPropsForScript(instance, styleProps);\n        hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n        styleProps = hoistableRoot.createElement(\"script\");\n        markNodeAsHoistable(styleProps);\n        setInitialProperties(styleProps, \"link\", instance);\n        hoistableRoot.head.appendChild(styleProps);\n        return (resource.instance = styleProps);\n      case \"void\":\n        return null;\n      default:\n        throw Error(formatProdErrorMessage(443, resource.type));\n    }\n  else\n    \"stylesheet\" === resource.type &&\n      0 === (resource.state.loading & 4) &&\n      ((instance = resource.instance),\n      (resource.state.loading |= 4),\n      insertStylesheet(instance, props.precedence, hoistableRoot));\n  return resource.instance;\n}\nfunction insertStylesheet(instance, precedence, root) {\n  for (\n    var nodes = root.querySelectorAll(\n        'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n      ),\n      last = nodes.length ? nodes[nodes.length - 1] : null,\n      prior = last,\n      i = 0;\n    i < nodes.length;\n    i++\n  ) {\n    var node = nodes[i];\n    if (node.dataset.precedence === precedence) prior = node;\n    else if (prior !== last) break;\n  }\n  prior\n    ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n    : ((precedence = 9 === root.nodeType ? root.head : root),\n      precedence.insertBefore(instance, precedence.firstChild));\n}\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n  null == stylesheetProps.crossOrigin &&\n    (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n  null == stylesheetProps.referrerPolicy &&\n    (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);\n}\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n  null == scriptProps.crossOrigin &&\n    (scriptProps.crossOrigin = preloadProps.crossOrigin);\n  null == scriptProps.referrerPolicy &&\n    (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == scriptProps.integrity &&\n    (scriptProps.integrity = preloadProps.integrity);\n}\nvar tagCaches = null;\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n  if (null === tagCaches) {\n    var cache = new Map();\n    var caches = (tagCaches = new Map());\n    caches.set(ownerDocument, cache);\n  } else\n    (caches = tagCaches),\n      (cache = caches.get(ownerDocument)),\n      cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n  if (cache.has(type)) return cache;\n  cache.set(type, null);\n  ownerDocument = ownerDocument.getElementsByTagName(type);\n  for (caches = 0; caches < ownerDocument.length; caches++) {\n    var node = ownerDocument[caches];\n    if (\n      !(\n        node[internalHoistableMarker] ||\n        node[internalInstanceKey] ||\n        (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n      ) &&\n      \"http://www.w3.org/2000/svg\" !== node.namespaceURI\n    ) {\n      var nodeKey = node.getAttribute(keyAttribute) || \"\";\n      nodeKey = type + nodeKey;\n      var existing = cache.get(nodeKey);\n      existing ? existing.push(node) : cache.set(nodeKey, [node]);\n    }\n  }\n  return cache;\n}\nfunction mountHoistable(hoistableRoot, type, instance) {\n  hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n  hoistableRoot.head.insertBefore(\n    instance,\n    \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n  );\n}\nfunction isHostHoistableType(type, props, hostContext) {\n  if (1 === hostContext || null != props.itemProp) return !1;\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return !0;\n    case \"style\":\n      if (\n        \"string\" !== typeof props.precedence ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href\n      )\n        break;\n      return !0;\n    case \"link\":\n      if (\n        \"string\" !== typeof props.rel ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href ||\n        props.onLoad ||\n        props.onError\n      )\n        break;\n      switch (props.rel) {\n        case \"stylesheet\":\n          return (\n            (type = props.disabled),\n            \"string\" === typeof props.precedence && null == type\n          );\n        default:\n          return !0;\n      }\n    case \"script\":\n      if (\n        props.async &&\n        \"function\" !== typeof props.async &&\n        \"symbol\" !== typeof props.async &&\n        !props.onLoad &&\n        !props.onError &&\n        props.src &&\n        \"string\" === typeof props.src\n      )\n        return !0;\n  }\n  return !1;\n}\nfunction preloadResource(resource) {\n  return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n    ? !1\n    : !0;\n}\nvar suspendedState = null;\nfunction noop() {}\nfunction suspendResource(hoistableRoot, resource, props) {\n  if (null === suspendedState) throw Error(formatProdErrorMessage(475));\n  var state = suspendedState;\n  if (\n    \"stylesheet\" === resource.type &&\n    (\"string\" !== typeof props.media ||\n      !1 !== matchMedia(props.media).matches) &&\n    0 === (resource.state.loading & 4)\n  ) {\n    if (null === resource.instance) {\n      var key = getStyleKey(props.href),\n        instance = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(key)\n        );\n      if (instance) {\n        hoistableRoot = instance._p;\n        null !== hoistableRoot &&\n          \"object\" === typeof hoistableRoot &&\n          \"function\" === typeof hoistableRoot.then &&\n          (state.count++,\n          (state = onUnsuspend.bind(state)),\n          hoistableRoot.then(state, state));\n        resource.state.loading |= 4;\n        resource.instance = instance;\n        markNodeAsHoistable(instance);\n        return;\n      }\n      instance = hoistableRoot.ownerDocument || hoistableRoot;\n      props = stylesheetPropsFromRawProps(props);\n      (key = preloadPropsMap.get(key)) &&\n        adoptPreloadPropsForStylesheet(props, key);\n      instance = instance.createElement(\"link\");\n      markNodeAsHoistable(instance);\n      var linkInstance = instance;\n      linkInstance._p = new Promise(function (resolve, reject) {\n        linkInstance.onload = resolve;\n        linkInstance.onerror = reject;\n      });\n      setInitialProperties(instance, \"link\", props);\n      resource.instance = instance;\n    }\n    null === state.stylesheets && (state.stylesheets = new Map());\n    state.stylesheets.set(resource, hoistableRoot);\n    (hoistableRoot = resource.state.preload) &&\n      0 === (resource.state.loading & 3) &&\n      (state.count++,\n      (resource = onUnsuspend.bind(state)),\n      hoistableRoot.addEventListener(\"load\", resource),\n      hoistableRoot.addEventListener(\"error\", resource));\n  }\n}\nfunction waitForCommitToBeReady() {\n  if (null === suspendedState) throw Error(formatProdErrorMessage(475));\n  var state = suspendedState;\n  state.stylesheets &&\n    0 === state.count &&\n    insertSuspendedStylesheets(state, state.stylesheets);\n  return 0 < state.count\n    ? function (commit) {\n        var stylesheetTimer = setTimeout(function () {\n          state.stylesheets &&\n            insertSuspendedStylesheets(state, state.stylesheets);\n          if (state.unsuspend) {\n            var unsuspend = state.unsuspend;\n            state.unsuspend = null;\n            unsuspend();\n          }\n        }, 6e4);\n        state.unsuspend = commit;\n        return function () {\n          state.unsuspend = null;\n          clearTimeout(stylesheetTimer);\n        };\n      }\n    : null;\n}\nfunction onUnsuspend() {\n  this.count--;\n  if (0 === this.count)\n    if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);\n    else if (this.unsuspend) {\n      var unsuspend = this.unsuspend;\n      this.unsuspend = null;\n      unsuspend();\n    }\n}\nvar precedencesByRoot = null;\nfunction insertSuspendedStylesheets(state, resources) {\n  state.stylesheets = null;\n  null !== state.unsuspend &&\n    (state.count++,\n    (precedencesByRoot = new Map()),\n    resources.forEach(insertStylesheetIntoRoot, state),\n    (precedencesByRoot = null),\n    onUnsuspend.call(state));\n}\nfunction insertStylesheetIntoRoot(root, resource) {\n  if (!(resource.state.loading & 4)) {\n    var precedences = precedencesByRoot.get(root);\n    if (precedences) var last = precedences.get(null);\n    else {\n      precedences = new Map();\n      precedencesByRoot.set(root, precedences);\n      for (\n        var nodes = root.querySelectorAll(\n            \"link[data-precedence],style[data-precedence]\"\n          ),\n          i = 0;\n        i < nodes.length;\n        i++\n      ) {\n        var node = nodes[i];\n        if (\n          \"LINK\" === node.nodeName ||\n          \"not all\" !== node.getAttribute(\"media\")\n        )\n          precedences.set(node.dataset.precedence, node), (last = node);\n      }\n      last && precedences.set(null, last);\n    }\n    nodes = resource.instance;\n    node = nodes.getAttribute(\"data-precedence\");\n    i = precedences.get(node) || last;\n    i === last && precedences.set(null, nodes);\n    precedences.set(node, nodes);\n    this.count++;\n    last = onUnsuspend.bind(this);\n    nodes.addEventListener(\"load\", last);\n    nodes.addEventListener(\"error\", last);\n    i\n      ? i.parentNode.insertBefore(nodes, i.nextSibling)\n      : ((root = 9 === root.nodeType ? root.head : root),\n        root.insertBefore(nodes, root.firstChild));\n    resource.state.loading |= 4;\n  }\n}\nvar HostTransitionContext = {\n  $$typeof: REACT_CONTEXT_TYPE,\n  Provider: null,\n  Consumer: null,\n  _currentValue: sharedNotPendingObject,\n  _currentValue2: sharedNotPendingObject,\n  _threadCount: 0\n};\nfunction FiberRootNode(\n  containerInfo,\n  tag,\n  hydrate,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  formState\n) {\n  this.tag = 1;\n  this.containerInfo = containerInfo;\n  this.pingCache = this.current = this.pendingChildren = null;\n  this.timeoutHandle = -1;\n  this.callbackNode =\n    this.next =\n    this.pendingContext =\n    this.context =\n    this.cancelPendingCommit =\n      null;\n  this.callbackPriority = 0;\n  this.expirationTimes = createLaneMap(-1);\n  this.entangledLanes =\n    this.shellSuspendCounter =\n    this.errorRecoveryDisabledLanes =\n    this.expiredLanes =\n    this.warmLanes =\n    this.pingedLanes =\n    this.suspendedLanes =\n    this.pendingLanes =\n      0;\n  this.entanglements = createLaneMap(0);\n  this.hiddenUpdates = createLaneMap(null);\n  this.identifierPrefix = identifierPrefix;\n  this.onUncaughtError = onUncaughtError;\n  this.onCaughtError = onCaughtError;\n  this.onRecoverableError = onRecoverableError;\n  this.pooledCache = null;\n  this.pooledCacheLanes = 0;\n  this.formState = formState;\n  this.incompleteTransitions = new Map();\n}\nfunction createFiberRoot(\n  containerInfo,\n  tag,\n  hydrate,\n  initialChildren,\n  hydrationCallbacks,\n  isStrictMode,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  transitionCallbacks,\n  formState\n) {\n  containerInfo = new FiberRootNode(\n    containerInfo,\n    tag,\n    hydrate,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    formState\n  );\n  tag = 1;\n  !0 === isStrictMode && (tag |= 24);\n  isStrictMode = createFiberImplClass(3, null, null, tag);\n  containerInfo.current = isStrictMode;\n  isStrictMode.stateNode = containerInfo;\n  tag = createCache();\n  tag.refCount++;\n  containerInfo.pooledCache = tag;\n  tag.refCount++;\n  isStrictMode.memoizedState = {\n    element: initialChildren,\n    isDehydrated: hydrate,\n    cache: tag\n  };\n  initializeUpdateQueue(isStrictMode);\n  return containerInfo;\n}\nfunction getContextForSubtree(parentComponent) {\n  if (!parentComponent) return emptyContextObject;\n  parentComponent = emptyContextObject;\n  return parentComponent;\n}\nfunction updateContainerImpl(\n  rootFiber,\n  lane,\n  element,\n  container,\n  parentComponent,\n  callback\n) {\n  parentComponent = getContextForSubtree(parentComponent);\n  null === container.context\n    ? (container.context = parentComponent)\n    : (container.pendingContext = parentComponent);\n  container = createUpdate(lane);\n  container.payload = { element: element };\n  callback = void 0 === callback ? null : callback;\n  null !== callback && (container.callback = callback);\n  element = enqueueUpdate(rootFiber, container, lane);\n  null !== element &&\n    (scheduleUpdateOnFiber(element, rootFiber, lane),\n    entangleTransitions(element, rootFiber, lane));\n}\nfunction markRetryLaneImpl(fiber, retryLane) {\n  fiber = fiber.memoizedState;\n  if (null !== fiber && null !== fiber.dehydrated) {\n    var a = fiber.retryLane;\n    fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n  }\n}\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n  markRetryLaneImpl(fiber, retryLane);\n  (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n}\nfunction attemptContinuousHydration(fiber) {\n  if (13 === fiber.tag) {\n    var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n    null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n    markRetryLaneIfNotHydrated(fiber, 67108864);\n  }\n}\nvar _enabled = !0;\nfunction dispatchDiscreteEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 2),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchContinuousEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 8),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchEvent(\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (_enabled) {\n    var blockedOn = findInstanceBlockingEvent(nativeEvent);\n    if (null === blockedOn)\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        return_targetInst,\n        targetContainer\n      ),\n        clearIfContinuousEvent(domEventName, nativeEvent);\n    else if (\n      queueIfContinuousEvent(\n        blockedOn,\n        domEventName,\n        eventSystemFlags,\n        targetContainer,\n        nativeEvent\n      )\n    )\n      nativeEvent.stopPropagation();\n    else if (\n      (clearIfContinuousEvent(domEventName, nativeEvent),\n      eventSystemFlags & 4 &&\n        -1 < discreteReplayableEvents.indexOf(domEventName))\n    ) {\n      for (; null !== blockedOn; ) {\n        var fiber = getInstanceFromNode(blockedOn);\n        if (null !== fiber)\n          switch (fiber.tag) {\n            case 3:\n              fiber = fiber.stateNode;\n              if (fiber.current.memoizedState.isDehydrated) {\n                var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n                if (0 !== lanes) {\n                  var root = fiber;\n                  root.pendingLanes |= 2;\n                  for (root.entangledLanes |= 2; lanes; ) {\n                    var lane = 1 << (31 - clz32(lanes));\n                    root.entanglements[1] |= lane;\n                    lanes &= ~lane;\n                  }\n                  ensureRootIsScheduled(fiber);\n                  0 === (executionContext & 6) &&\n                    ((workInProgressRootRenderTargetTime = now() + 500),\n                    flushSyncWorkAcrossRoots_impl(0, !1));\n                }\n              }\n              break;\n            case 13:\n              (root = enqueueConcurrentRenderForLane(fiber, 2)),\n                null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n                flushSyncWork$1(),\n                markRetryLaneIfNotHydrated(fiber, 2);\n          }\n        fiber = findInstanceBlockingEvent(nativeEvent);\n        null === fiber &&\n          dispatchEventForPluginEventSystem(\n            domEventName,\n            eventSystemFlags,\n            nativeEvent,\n            return_targetInst,\n            targetContainer\n          );\n        if (fiber === blockedOn) break;\n        blockedOn = fiber;\n      }\n      null !== blockedOn && nativeEvent.stopPropagation();\n    } else\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        null,\n        targetContainer\n      );\n  }\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n  nativeEvent = getEventTarget(nativeEvent);\n  return findInstanceBlockingTarget(nativeEvent);\n}\nvar return_targetInst = null;\nfunction findInstanceBlockingTarget(targetNode) {\n  return_targetInst = null;\n  targetNode = getClosestInstanceFromNode(targetNode);\n  if (null !== targetNode) {\n    var nearestMounted = getNearestMountedFiber(targetNode);\n    if (null === nearestMounted) targetNode = null;\n    else {\n      var tag = nearestMounted.tag;\n      if (13 === tag) {\n        targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (3 === tag) {\n        if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n          return 3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        targetNode = null;\n      } else nearestMounted !== targetNode && (targetNode = null);\n    }\n  }\n  return_targetInst = targetNode;\n  return null;\n}\nfunction getEventPriority(domEventName) {\n  switch (domEventName) {\n    case \"beforetoggle\":\n    case \"cancel\":\n    case \"click\":\n    case \"close\":\n    case \"contextmenu\":\n    case \"copy\":\n    case \"cut\":\n    case \"auxclick\":\n    case \"dblclick\":\n    case \"dragend\":\n    case \"dragstart\":\n    case \"drop\":\n    case \"focusin\":\n    case \"focusout\":\n    case \"input\":\n    case \"invalid\":\n    case \"keydown\":\n    case \"keypress\":\n    case \"keyup\":\n    case \"mousedown\":\n    case \"mouseup\":\n    case \"paste\":\n    case \"pause\":\n    case \"play\":\n    case \"pointercancel\":\n    case \"pointerdown\":\n    case \"pointerup\":\n    case \"ratechange\":\n    case \"reset\":\n    case \"resize\":\n    case \"seeked\":\n    case \"submit\":\n    case \"toggle\":\n    case \"touchcancel\":\n    case \"touchend\":\n    case \"touchstart\":\n    case \"volumechange\":\n    case \"change\":\n    case \"selectionchange\":\n    case \"textInput\":\n    case \"compositionstart\":\n    case \"compositionend\":\n    case \"compositionupdate\":\n    case \"beforeblur\":\n    case \"afterblur\":\n    case \"beforeinput\":\n    case \"blur\":\n    case \"fullscreenchange\":\n    case \"focus\":\n    case \"hashchange\":\n    case \"popstate\":\n    case \"select\":\n    case \"selectstart\":\n      return 2;\n    case \"drag\":\n    case \"dragenter\":\n    case \"dragexit\":\n    case \"dragleave\":\n    case \"dragover\":\n    case \"mousemove\":\n    case \"mouseout\":\n    case \"mouseover\":\n    case \"pointermove\":\n    case \"pointerout\":\n    case \"pointerover\":\n    case \"scroll\":\n    case \"touchmove\":\n    case \"wheel\":\n    case \"mouseenter\":\n    case \"mouseleave\":\n    case \"pointerenter\":\n    case \"pointerleave\":\n      return 8;\n    case \"message\":\n      switch (getCurrentPriorityLevel()) {\n        case ImmediatePriority:\n          return 2;\n        case UserBlockingPriority:\n          return 8;\n        case NormalPriority$1:\n        case LowPriority:\n          return 32;\n        case IdlePriority:\n          return 268435456;\n        default:\n          return 32;\n      }\n    default:\n      return 32;\n  }\n}\nvar hasScheduledReplayAttempt = !1,\n  queuedFocus = null,\n  queuedDrag = null,\n  queuedMouse = null,\n  queuedPointers = new Map(),\n  queuedPointerCaptures = new Map(),\n  queuedExplicitHydrationTargets = [],\n  discreteReplayableEvents =\n    \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n      \" \"\n    );\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"focusin\":\n    case \"focusout\":\n      queuedFocus = null;\n      break;\n    case \"dragenter\":\n    case \"dragleave\":\n      queuedDrag = null;\n      break;\n    case \"mouseover\":\n    case \"mouseout\":\n      queuedMouse = null;\n      break;\n    case \"pointerover\":\n    case \"pointerout\":\n      queuedPointers.delete(nativeEvent.pointerId);\n      break;\n    case \"gotpointercapture\":\n    case \"lostpointercapture\":\n      queuedPointerCaptures.delete(nativeEvent.pointerId);\n  }\n}\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(\n  existingQueuedEvent,\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (\n    null === existingQueuedEvent ||\n    existingQueuedEvent.nativeEvent !== nativeEvent\n  )\n    return (\n      (existingQueuedEvent = {\n        blockedOn: blockedOn,\n        domEventName: domEventName,\n        eventSystemFlags: eventSystemFlags,\n        nativeEvent: nativeEvent,\n        targetContainers: [targetContainer]\n      }),\n      null !== blockedOn &&\n        ((blockedOn = getInstanceFromNode(blockedOn)),\n        null !== blockedOn && attemptContinuousHydration(blockedOn)),\n      existingQueuedEvent\n    );\n  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n  blockedOn = existingQueuedEvent.targetContainers;\n  null !== targetContainer &&\n    -1 === blockedOn.indexOf(targetContainer) &&\n    blockedOn.push(targetContainer);\n  return existingQueuedEvent;\n}\nfunction queueIfContinuousEvent(\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  switch (domEventName) {\n    case \"focusin\":\n      return (\n        (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedFocus,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"dragenter\":\n      return (\n        (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedDrag,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"mouseover\":\n      return (\n        (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedMouse,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"pointerover\":\n      var pointerId = nativeEvent.pointerId;\n      queuedPointers.set(\n        pointerId,\n        accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedPointers.get(pointerId) || null,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )\n      );\n      return !0;\n    case \"gotpointercapture\":\n      return (\n        (pointerId = nativeEvent.pointerId),\n        queuedPointerCaptures.set(\n          pointerId,\n          accumulateOrCreateContinuousQueuedReplayableEvent(\n            queuedPointerCaptures.get(pointerId) || null,\n            blockedOn,\n            domEventName,\n            eventSystemFlags,\n            targetContainer,\n            nativeEvent\n          )\n        ),\n        !0\n      );\n  }\n  return !1;\n}\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n  var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n  if (null !== targetInst) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n    if (null !== nearestMounted)\n      if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n        if (\n          ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            if (13 === nearestMounted.tag) {\n              var lane = requestUpdateLane();\n              lane = getBumpedLaneForHydrationByLane(lane);\n              var root = enqueueConcurrentRenderForLane(nearestMounted, lane);\n              null !== root &&\n                scheduleUpdateOnFiber(root, nearestMounted, lane);\n              markRetryLaneIfNotHydrated(nearestMounted, lane);\n            }\n          });\n          return;\n        }\n      } else if (\n        3 === targetInst &&\n        nearestMounted.stateNode.current.memoizedState.isDehydrated\n      ) {\n        queuedTarget.blockedOn =\n          3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        return;\n      }\n  }\n  queuedTarget.blockedOn = null;\n}\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n  if (null !== queuedEvent.blockedOn) return !1;\n  for (\n    var targetContainers = queuedEvent.targetContainers;\n    0 < targetContainers.length;\n\n  ) {\n    var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n    if (null === nextBlockedOn) {\n      nextBlockedOn = queuedEvent.nativeEvent;\n      var nativeEventClone = new nextBlockedOn.constructor(\n        nextBlockedOn.type,\n        nextBlockedOn\n      );\n      currentReplayingEvent = nativeEventClone;\n      nextBlockedOn.target.dispatchEvent(nativeEventClone);\n      currentReplayingEvent = null;\n    } else\n      return (\n        (targetContainers = getInstanceFromNode(nextBlockedOn)),\n        null !== targetContainers &&\n          attemptContinuousHydration(targetContainers),\n        (queuedEvent.blockedOn = nextBlockedOn),\n        !1\n      );\n    targetContainers.shift();\n  }\n  return !0;\n}\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n  attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n}\nfunction replayUnblockedEvents() {\n  hasScheduledReplayAttempt = !1;\n  null !== queuedFocus &&\n    attemptReplayContinuousQueuedEvent(queuedFocus) &&\n    (queuedFocus = null);\n  null !== queuedDrag &&\n    attemptReplayContinuousQueuedEvent(queuedDrag) &&\n    (queuedDrag = null);\n  null !== queuedMouse &&\n    attemptReplayContinuousQueuedEvent(queuedMouse) &&\n    (queuedMouse = null);\n  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n  queuedEvent.blockedOn === unblocked &&\n    ((queuedEvent.blockedOn = null),\n    hasScheduledReplayAttempt ||\n      ((hasScheduledReplayAttempt = !0),\n      Scheduler.unstable_scheduleCallback(\n        Scheduler.unstable_NormalPriority,\n        replayUnblockedEvents\n      )));\n}\nvar lastScheduledReplayQueue = null;\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n  lastScheduledReplayQueue !== formReplayingQueue &&\n    ((lastScheduledReplayQueue = formReplayingQueue),\n    Scheduler.unstable_scheduleCallback(\n      Scheduler.unstable_NormalPriority,\n      function () {\n        lastScheduledReplayQueue === formReplayingQueue &&\n          (lastScheduledReplayQueue = null);\n        for (var i = 0; i < formReplayingQueue.length; i += 3) {\n          var form = formReplayingQueue[i],\n            submitterOrAction = formReplayingQueue[i + 1],\n            formData = formReplayingQueue[i + 2];\n          if (\"function\" !== typeof submitterOrAction)\n            if (null === findInstanceBlockingTarget(submitterOrAction || form))\n              continue;\n            else break;\n          var formInst = getInstanceFromNode(form);\n          null !== formInst &&\n            (formReplayingQueue.splice(i, 3),\n            (i -= 3),\n            startHostTransition(\n              formInst,\n              {\n                pending: !0,\n                data: formData,\n                method: form.method,\n                action: submitterOrAction\n              },\n              submitterOrAction,\n              formData\n            ));\n        }\n      }\n    ));\n}\nfunction retryIfBlockedOn(unblocked) {\n  function unblock(queuedEvent) {\n    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n  }\n  null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n  null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n  null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n  queuedPointers.forEach(unblock);\n  queuedPointerCaptures.forEach(unblock);\n  for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n    var queuedTarget = queuedExplicitHydrationTargets[i];\n    queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n  }\n  for (\n    ;\n    0 < queuedExplicitHydrationTargets.length &&\n    ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n  )\n    attemptExplicitHydrationTarget(i),\n      null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n  i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n  if (null != i)\n    for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n      var form = i[queuedTarget],\n        submitterOrAction = i[queuedTarget + 1],\n        formProps = form[internalPropsKey] || null;\n      if (\"function\" === typeof submitterOrAction)\n        formProps || scheduleReplayQueueIfNeeded(i);\n      else if (formProps) {\n        var action = null;\n        if (submitterOrAction && submitterOrAction.hasAttribute(\"formAction\"))\n          if (\n            ((form = submitterOrAction),\n            (formProps = submitterOrAction[internalPropsKey] || null))\n          )\n            action = formProps.formAction;\n          else {\n            if (null !== findInstanceBlockingTarget(form)) continue;\n          }\n        else action = formProps.action;\n        \"function\" === typeof action\n          ? (i[queuedTarget + 1] = action)\n          : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n        scheduleReplayQueueIfNeeded(i);\n      }\n    }\n}\nfunction ReactDOMRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n  function (children) {\n    var root = this._internalRoot;\n    if (null === root) throw Error(formatProdErrorMessage(409));\n    var current = root.current,\n      lane = requestUpdateLane();\n    updateContainerImpl(current, lane, children, root, null, null);\n  };\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n  function () {\n    var root = this._internalRoot;\n    if (null !== root) {\n      this._internalRoot = null;\n      var container = root.containerInfo;\n      updateContainerImpl(root.current, 2, null, root, null, null);\n      flushSyncWork$1();\n      container[internalContainerInstanceKey] = null;\n    }\n  };\nfunction ReactDOMHydrationRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {\n  if (target) {\n    var updatePriority = resolveUpdatePriority();\n    target = { blockedOn: null, target: target, priority: updatePriority };\n    for (\n      var i = 0;\n      i < queuedExplicitHydrationTargets.length &&\n      0 !== updatePriority &&\n      updatePriority < queuedExplicitHydrationTargets[i].priority;\n      i++\n    );\n    queuedExplicitHydrationTargets.splice(i, 0, target);\n    0 === i && attemptExplicitHydrationTarget(target);\n  }\n};\nvar isomorphicReactPackageVersion$jscomp$inline_1785 = React.version;\nif (\n  \"19.1.0\" !==\n  isomorphicReactPackageVersion$jscomp$inline_1785\n)\n  throw Error(\n    formatProdErrorMessage(\n      527,\n      isomorphicReactPackageVersion$jscomp$inline_1785,\n      \"19.1.0\"\n    )\n  );\nReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n  var fiber = componentOrElement._reactInternals;\n  if (void 0 === fiber) {\n    if (\"function\" === typeof componentOrElement.render)\n      throw Error(formatProdErrorMessage(188));\n    componentOrElement = Object.keys(componentOrElement).join(\",\");\n    throw Error(formatProdErrorMessage(268, componentOrElement));\n  }\n  componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n  componentOrElement =\n    null !== componentOrElement\n      ? findCurrentHostFiberImpl(componentOrElement)\n      : null;\n  componentOrElement =\n    null === componentOrElement ? null : componentOrElement.stateNode;\n  return componentOrElement;\n};\nvar internals$jscomp$inline_2256 = {\n  bundleType: 0,\n  version: \"19.1.0\",\n  rendererPackageName: \"react-dom\",\n  currentDispatcherRef: ReactSharedInternals,\n  reconcilerVersion: \"19.1.0\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n  var hook$jscomp$inline_2257 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n  if (\n    !hook$jscomp$inline_2257.isDisabled &&\n    hook$jscomp$inline_2257.supportsFiber\n  )\n    try {\n      (rendererID = hook$jscomp$inline_2257.inject(\n        internals$jscomp$inline_2256\n      )),\n        (injectedHook = hook$jscomp$inline_2257);\n    } catch (err) {}\n}\nexports.createRoot = function (container, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    transitionCallbacks = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.unstable_transitionCallbacks &&\n      (transitionCallbacks = options.unstable_transitionCallbacks));\n  options = createFiberRoot(\n    container,\n    1,\n    !1,\n    null,\n    null,\n    isStrictMode,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    transitionCallbacks,\n    null\n  );\n  container[internalContainerInstanceKey] = options.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMRoot(options);\n};\nexports.hydrateRoot = function (container, initialChildren, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    transitionCallbacks = null,\n    formState = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.unstable_transitionCallbacks &&\n      (transitionCallbacks = options.unstable_transitionCallbacks),\n    void 0 !== options.formState && (formState = options.formState));\n  initialChildren = createFiberRoot(\n    container,\n    1,\n    !0,\n    initialChildren,\n    null != options ? options : null,\n    isStrictMode,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    transitionCallbacks,\n    formState\n  );\n  initialChildren.context = getContextForSubtree(null);\n  options = initialChildren.current;\n  isStrictMode = requestUpdateLane();\n  isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n  identifierPrefix = createUpdate(isStrictMode);\n  identifierPrefix.callback = null;\n  enqueueUpdate(options, identifierPrefix, isStrictMode);\n  options = isStrictMode;\n  initialChildren.current.lanes = options;\n  markRootUpdated$1(initialChildren, options);\n  ensureRootIsScheduled(initialChildren);\n  container[internalContainerInstanceKey] = initialChildren.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.1.0\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom-client.production.js');\n} else {\n  module.exports = require('./cjs/react-dom-client.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n  callback();\n}\n\nlet batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport const setBatch = newBatch => batch = newBatch; // Supply a getter just to skip dealing with ESM bindings\n\nexport const getBatch = () => batch;","import * as React from 'react';\nconst ContextKey = Symbol.for(`react-redux-context`);\nconst gT = typeof globalThis !== \"undefined\" ? globalThis :\n/* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */\n{};\n\nfunction getContext() {\n  var _gT$ContextKey;\n\n  if (!React.createContext) return {};\n  const contextMap = (_gT$ContextKey = gT[ContextKey]) != null ? _gT$ContextKey : gT[ContextKey] = new Map();\n  let realContext = contextMap.get(React.createContext);\n\n  if (!realContext) {\n    realContext = React.createContext(null);\n\n    if (process.env.NODE_ENV !== 'production') {\n      realContext.displayName = 'ReactRedux';\n    }\n\n    contextMap.set(React.createContext, realContext);\n  }\n\n  return realContext;\n}\n\nexport const ReactReduxContext = /*#__PURE__*/getContext();\nexport default ReactReduxContext;","import { useContext } from 'react';\nimport { ReactReduxContext } from '../components/Context';\n\n/**\r\n * Hook factory, which creates a `useReduxContext` hook bound to a given context. This is a low-level\r\n * hook that you should usually not need to call directly.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useReduxContext` hook bound to the specified context.\r\n */\nexport function createReduxContextHook(context = ReactReduxContext) {\n  return function useReduxContext() {\n    const contextValue = useContext(context);\n\n    if (process.env.NODE_ENV !== 'production' && !contextValue) {\n      throw new Error('could not find react-redux context value; please ensure the component is wrapped in a <Provider>');\n    }\n\n    return contextValue;\n  };\n}\n/**\r\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\r\n * hook that you should usually not need to call directly.\r\n *\r\n * @returns {any} the value of the `ReactReduxContext`\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useReduxContext } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n *   const { store } = useReduxContext()\r\n *   return <div>{store.getState()}</div>\r\n * }\r\n */\n\nexport const useReduxContext = /*#__PURE__*/createReduxContextHook();","import { useCallback, useDebugValue, useRef } from 'react';\nimport { createReduxContextHook, useReduxContext as useDefaultReduxContext } from './useReduxContext';\nimport { ReactReduxContext } from '../components/Context';\nimport { notInitialized } from '../utils/useSyncExternalStore';\nlet useSyncExternalStoreWithSelector = notInitialized;\nexport const initializeUseSelector = fn => {\n  useSyncExternalStoreWithSelector = fn;\n};\n\nconst refEquality = (a, b) => a === b;\n/**\r\n * Hook factory, which creates a `useSelector` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useSelector` hook bound to the specified context.\r\n */\n\n\nexport function createSelectorHook(context = ReactReduxContext) {\n  const useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : createReduxContextHook(context);\n  return function useSelector(selector, equalityFnOrOptions = {}) {\n    const {\n      equalityFn = refEquality,\n      stabilityCheck = undefined,\n      noopCheck = undefined\n    } = typeof equalityFnOrOptions === 'function' ? {\n      equalityFn: equalityFnOrOptions\n    } : equalityFnOrOptions;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!selector) {\n        throw new Error(`You must pass a selector to useSelector`);\n      }\n\n      if (typeof selector !== 'function') {\n        throw new Error(`You must pass a function as a selector to useSelector`);\n      }\n\n      if (typeof equalityFn !== 'function') {\n        throw new Error(`You must pass a function as an equality function to useSelector`);\n      }\n    }\n\n    const {\n      store,\n      subscription,\n      getServerState,\n      stabilityCheck: globalStabilityCheck,\n      noopCheck: globalNoopCheck\n    } = useReduxContext();\n    const firstRun = useRef(true);\n    const wrappedSelector = useCallback({\n      [selector.name](state) {\n        const selected = selector(state);\n\n        if (process.env.NODE_ENV !== 'production') {\n          const finalStabilityCheck = typeof stabilityCheck === 'undefined' ? globalStabilityCheck : stabilityCheck;\n\n          if (finalStabilityCheck === 'always' || finalStabilityCheck === 'once' && firstRun.current) {\n            const toCompare = selector(state);\n\n            if (!equalityFn(selected, toCompare)) {\n              let stack = undefined;\n\n              try {\n                throw new Error();\n              } catch (e) {\n                ;\n                ({\n                  stack\n                } = e);\n              }\n\n              console.warn('Selector ' + (selector.name || 'unknown') + ' returned a different result when called with the same parameters. This can lead to unnecessary rerenders.' + '\\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization', {\n                state,\n                selected,\n                selected2: toCompare,\n                stack\n              });\n            }\n          }\n\n          const finalNoopCheck = typeof noopCheck === 'undefined' ? globalNoopCheck : noopCheck;\n\n          if (finalNoopCheck === 'always' || finalNoopCheck === 'once' && firstRun.current) {\n            // @ts-ignore\n            if (selected === state) {\n              let stack = undefined;\n\n              try {\n                throw new Error();\n              } catch (e) {\n                ;\n                ({\n                  stack\n                } = e);\n              }\n\n              console.warn('Selector ' + (selector.name || 'unknown') + ' returned the root state when called. This can lead to unnecessary rerenders.' + '\\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.', {\n                stack\n              });\n            }\n          }\n\n          if (firstRun.current) firstRun.current = false;\n        }\n\n        return selected;\n      }\n\n    }[selector.name], [selector, globalStabilityCheck, stabilityCheck]);\n    const selectedState = useSyncExternalStoreWithSelector(subscription.addNestedSub, store.getState, getServerState || store.getState, wrappedSelector, equalityFn);\n    useDebugValue(selectedState);\n    return selectedState;\n  };\n}\n/**\r\n * A hook to access the redux store's state. This hook takes a selector function\r\n * as an argument. The selector is called with the store state.\r\n *\r\n * This hook takes an optional equality comparison function as the second parameter\r\n * that allows you to customize the way the selected state is compared to determine\r\n * whether the component needs to be re-rendered.\r\n *\r\n * @param {Function} selector the selector function\r\n * @param {Function=} equalityFn the function that will be used to determine equality\r\n *\r\n * @returns {any} the selected state\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n *   const counter = useSelector(state => state.counter)\r\n *   return <div>{counter}</div>\r\n * }\r\n */\n\nexport const useSelector = /*#__PURE__*/createSelectorHook();","export const notInitialized = () => {\n  throw new Error('uSES not initialized!');\n};","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nfunction createListenerCollection() {\n  const batch = getBatch();\n  let first = null;\n  let last = null;\n  return {\n    clear() {\n      first = null;\n      last = null;\n    },\n\n    notify() {\n      batch(() => {\n        let listener = first;\n\n        while (listener) {\n          listener.callback();\n          listener = listener.next;\n        }\n      });\n    },\n\n    get() {\n      let listeners = [];\n      let listener = first;\n\n      while (listener) {\n        listeners.push(listener);\n        listener = listener.next;\n      }\n\n      return listeners;\n    },\n\n    subscribe(callback) {\n      let isSubscribed = true;\n      let listener = last = {\n        callback,\n        next: null,\n        prev: last\n      };\n\n      if (listener.prev) {\n        listener.prev.next = listener;\n      } else {\n        first = listener;\n      }\n\n      return function unsubscribe() {\n        if (!isSubscribed || first === null) return;\n        isSubscribed = false;\n\n        if (listener.next) {\n          listener.next.prev = listener.prev;\n        } else {\n          last = listener.prev;\n        }\n\n        if (listener.prev) {\n          listener.prev.next = listener.next;\n        } else {\n          first = listener.next;\n        }\n      };\n    }\n\n  };\n}\n\nconst nullListeners = {\n  notify() {},\n\n  get: () => []\n};\nexport function createSubscription(store, parentSub) {\n  let unsubscribe;\n  let listeners = nullListeners; // Reasons to keep the subscription active\n\n  let subscriptionsAmount = 0; // Is this specific subscription subscribed (or only nested ones?)\n\n  let selfSubscribed = false;\n\n  function addNestedSub(listener) {\n    trySubscribe();\n    const cleanupListener = listeners.subscribe(listener); // cleanup nested sub\n\n    let removed = false;\n    return () => {\n      if (!removed) {\n        removed = true;\n        cleanupListener();\n        tryUnsubscribe();\n      }\n    };\n  }\n\n  function notifyNestedSubs() {\n    listeners.notify();\n  }\n\n  function handleChangeWrapper() {\n    if (subscription.onStateChange) {\n      subscription.onStateChange();\n    }\n  }\n\n  function isSubscribed() {\n    return selfSubscribed;\n  }\n\n  function trySubscribe() {\n    subscriptionsAmount++;\n\n    if (!unsubscribe) {\n      unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n      listeners = createListenerCollection();\n    }\n  }\n\n  function tryUnsubscribe() {\n    subscriptionsAmount--;\n\n    if (unsubscribe && subscriptionsAmount === 0) {\n      unsubscribe();\n      unsubscribe = undefined;\n      listeners.clear();\n      listeners = nullListeners;\n    }\n  }\n\n  function trySubscribeSelf() {\n    if (!selfSubscribed) {\n      selfSubscribed = true;\n      trySubscribe();\n    }\n  }\n\n  function tryUnsubscribeSelf() {\n    if (selfSubscribed) {\n      selfSubscribed = false;\n      tryUnsubscribe();\n    }\n  }\n\n  const subscription = {\n    addNestedSub,\n    notifyNestedSubs,\n    handleChangeWrapper,\n    isSubscribed,\n    trySubscribe: trySubscribeSelf,\n    tryUnsubscribe: tryUnsubscribeSelf,\n    getListeners: () => listeners\n  };\n  return subscription;\n}","import * as React from 'react'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n// Matches logic in React's `shared/ExecutionEnvironment` file\n\nexport const canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\nexport const useIsomorphicLayoutEffect = canUseDOM ? React.useLayoutEffect : React.useEffect;","import * as React from 'react';\nimport { ReactReduxContext } from './Context';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\n\nfunction Provider({\n  store,\n  context,\n  children,\n  serverState,\n  stabilityCheck = 'once',\n  noopCheck = 'once'\n}) {\n  const contextValue = React.useMemo(() => {\n    const subscription = createSubscription(store);\n    return {\n      store,\n      subscription,\n      getServerState: serverState ? () => serverState : undefined,\n      stabilityCheck,\n      noopCheck\n    };\n  }, [store, serverState, stabilityCheck, noopCheck]);\n  const previousState = React.useMemo(() => store.getState(), [store]);\n  useIsomorphicLayoutEffect(() => {\n    const {\n      subscription\n    } = contextValue;\n    subscription.onStateChange = subscription.notifyNestedSubs;\n    subscription.trySubscribe();\n\n    if (previousState !== store.getState()) {\n      subscription.notifyNestedSubs();\n    }\n\n    return () => {\n      subscription.tryUnsubscribe();\n      subscription.onStateChange = undefined;\n    };\n  }, [contextValue, previousState]);\n  const Context = context || ReactReduxContext; // @ts-ignore 'AnyAction' is assignable to the constraint of type 'A', but 'A' could be instantiated with a different subtype\n\n  return /*#__PURE__*/React.createElement(Context.Provider, {\n    value: contextValue\n  }, children);\n}\n\nexport default Provider;","import { ReactReduxContext } from '../components/Context';\nimport { useReduxContext as useDefaultReduxContext, createReduxContextHook } from './useReduxContext';\n/**\r\n * Hook factory, which creates a `useStore` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useStore` hook bound to the specified context.\r\n */\n\nexport function createStoreHook(context = ReactReduxContext) {\n  const useReduxContext = // @ts-ignore\n  context === ReactReduxContext ? useDefaultReduxContext : // @ts-ignore\n  createReduxContextHook(context);\n  return function useStore() {\n    const {\n      store\n    } = useReduxContext(); // @ts-ignore\n\n    return store;\n  };\n}\n/**\r\n * A hook to access the redux store.\r\n *\r\n * @returns {any} the redux store\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useStore } from 'react-redux'\r\n *\r\n * export const ExampleComponent = () => {\r\n *   const store = useStore()\r\n *   return <div>{store.getState()}</div>\r\n * }\r\n */\n\nexport const useStore = /*#__PURE__*/createStoreHook();","import { ReactReduxContext } from '../components/Context';\nimport { useStore as useDefaultStore, createStoreHook } from './useStore';\n/**\r\n * Hook factory, which creates a `useDispatch` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useDispatch` hook bound to the specified context.\r\n */\n\nexport function createDispatchHook(context = ReactReduxContext) {\n  const useStore = // @ts-ignore\n  context === ReactReduxContext ? useDefaultStore : createStoreHook(context);\n  return function useDispatch() {\n    const store = useStore(); // @ts-ignore\n\n    return store.dispatch;\n  };\n}\n/**\r\n * A hook to access the redux `dispatch` function.\r\n *\r\n * @returns {any|function} redux store's `dispatch` function\r\n *\r\n * @example\r\n *\r\n * import React, { useCallback } from 'react'\r\n * import { useDispatch } from 'react-redux'\r\n *\r\n * export const CounterComponent = ({ value }) => {\r\n *   const dispatch = useDispatch()\r\n *   const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\r\n *   return (\r\n *     <div>\r\n *       <span>{value}</span>\r\n *       <button onClick={increaseCounter}>Increase counter</button>\r\n *     </div>\r\n *   )\r\n * }\r\n */\n\nexport const useDispatch = /*#__PURE__*/createDispatchHook();","// src/utils/formatProdErrorMessage.ts\nfunction formatProdErrorMessage(code) {\n  return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;\n}\n\n// src/utils/symbol-observable.ts\nvar $$observable = /* @__PURE__ */ (() => typeof Symbol === \"function\" && Symbol.observable || \"@@observable\")();\nvar symbol_observable_default = $$observable;\n\n// src/utils/actionTypes.ts\nvar randomString = () => Math.random().toString(36).substring(7).split(\"\").join(\".\");\nvar ActionTypes = {\n  INIT: `@@redux/INIT${/* @__PURE__ */ randomString()}`,\n  REPLACE: `@@redux/REPLACE${/* @__PURE__ */ randomString()}`,\n  PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nvar actionTypes_default = ActionTypes;\n\n// src/utils/isPlainObject.ts\nfunction isPlainObject(obj) {\n  if (typeof obj !== \"object\" || obj === null)\n    return false;\n  let proto = obj;\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n  return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}\n\n// src/utils/kindOf.ts\nfunction miniKindOf(val) {\n  if (val === void 0)\n    return \"undefined\";\n  if (val === null)\n    return \"null\";\n  const type = typeof val;\n  switch (type) {\n    case \"boolean\":\n    case \"string\":\n    case \"number\":\n    case \"symbol\":\n    case \"function\": {\n      return type;\n    }\n  }\n  if (Array.isArray(val))\n    return \"array\";\n  if (isDate(val))\n    return \"date\";\n  if (isError(val))\n    return \"error\";\n  const constructorName = ctorName(val);\n  switch (constructorName) {\n    case \"Symbol\":\n    case \"Promise\":\n    case \"WeakMap\":\n    case \"WeakSet\":\n    case \"Map\":\n    case \"Set\":\n      return constructorName;\n  }\n  return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, \"\");\n}\nfunction ctorName(val) {\n  return typeof val.constructor === \"function\" ? val.constructor.name : null;\n}\nfunction isError(val) {\n  return val instanceof Error || typeof val.message === \"string\" && val.constructor && typeof val.constructor.stackTraceLimit === \"number\";\n}\nfunction isDate(val) {\n  if (val instanceof Date)\n    return true;\n  return typeof val.toDateString === \"function\" && typeof val.getDate === \"function\" && typeof val.setDate === \"function\";\n}\nfunction kindOf(val) {\n  let typeOfVal = typeof val;\n  if (process.env.NODE_ENV !== \"production\") {\n    typeOfVal = miniKindOf(val);\n  }\n  return typeOfVal;\n}\n\n// src/createStore.ts\nfunction createStore(reducer, preloadedState, enhancer) {\n  if (typeof reducer !== \"function\") {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n  }\n  if (typeof preloadedState === \"function\" && typeof enhancer === \"function\" || typeof enhancer === \"function\" && typeof arguments[3] === \"function\") {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : \"It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.\");\n  }\n  if (typeof preloadedState === \"function\" && typeof enhancer === \"undefined\") {\n    enhancer = preloadedState;\n    preloadedState = void 0;\n  }\n  if (typeof enhancer !== \"undefined\") {\n    if (typeof enhancer !== \"function\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n    }\n    return enhancer(createStore)(reducer, preloadedState);\n  }\n  let currentReducer = reducer;\n  let currentState = preloadedState;\n  let currentListeners = /* @__PURE__ */ new Map();\n  let nextListeners = currentListeners;\n  let listenerIdCounter = 0;\n  let isDispatching = false;\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = /* @__PURE__ */ new Map();\n      currentListeners.forEach((listener, key) => {\n        nextListeners.set(key, listener);\n      });\n    }\n  }\n  function getState() {\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : \"You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.\");\n    }\n    return currentState;\n  }\n  function subscribe(listener) {\n    if (typeof listener !== \"function\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n    }\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : \"You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.\");\n    }\n    let isSubscribed = true;\n    ensureCanMutateNextListeners();\n    const listenerId = listenerIdCounter++;\n    nextListeners.set(listenerId, listener);\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return;\n      }\n      if (isDispatching) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : \"You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.\");\n      }\n      isSubscribed = false;\n      ensureCanMutateNextListeners();\n      nextListeners.delete(listenerId);\n      currentListeners = null;\n    };\n  }\n  function dispatch(action) {\n    if (!isPlainObject(action)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n    }\n    if (typeof action.type === \"undefined\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n    }\n    if (typeof action.type !== \"string\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n    }\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : \"Reducers may not dispatch actions.\");\n    }\n    try {\n      isDispatching = true;\n      currentState = currentReducer(currentState, action);\n    } finally {\n      isDispatching = false;\n    }\n    const listeners = currentListeners = nextListeners;\n    listeners.forEach((listener) => {\n      listener();\n    });\n    return action;\n  }\n  function replaceReducer(nextReducer) {\n    if (typeof nextReducer !== \"function\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n    }\n    currentReducer = nextReducer;\n    dispatch({\n      type: actionTypes_default.REPLACE\n    });\n  }\n  function observable() {\n    const outerSubscribe = subscribe;\n    return {\n      /**\n       * The minimal observable subscription method.\n       * @param observer Any object that can be used as an observer.\n       * The observer object should have a `next` method.\n       * @returns An object with an `unsubscribe` method that can\n       * be used to unsubscribe the observable from the store, and prevent further\n       * emission of values from the observable.\n       */\n      subscribe(observer) {\n        if (typeof observer !== \"object\" || observer === null) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n        }\n        function observeState() {\n          const observerAsObserver = observer;\n          if (observerAsObserver.next) {\n            observerAsObserver.next(getState());\n          }\n        }\n        observeState();\n        const unsubscribe = outerSubscribe(observeState);\n        return {\n          unsubscribe\n        };\n      },\n      [symbol_observable_default]() {\n        return this;\n      }\n    };\n  }\n  dispatch({\n    type: actionTypes_default.INIT\n  });\n  const store = {\n    dispatch,\n    subscribe,\n    getState,\n    replaceReducer,\n    [symbol_observable_default]: observable\n  };\n  return store;\n}\nfunction legacy_createStore(reducer, preloadedState, enhancer) {\n  return createStore(reducer, preloadedState, enhancer);\n}\n\n// src/utils/warning.ts\nfunction warning(message) {\n  if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n    console.error(message);\n  }\n  try {\n    throw new Error(message);\n  } catch (e) {\n  }\n}\n\n// src/combineReducers.ts\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n  const reducerKeys = Object.keys(reducers);\n  const argumentName = action && action.type === actionTypes_default.INIT ? \"preloadedState argument passed to createStore\" : \"previous state received by the reducer\";\n  if (reducerKeys.length === 0) {\n    return \"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.\";\n  }\n  if (!isPlainObject(inputState)) {\n    return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following keys: \"${reducerKeys.join('\", \"')}\"`;\n  }\n  const unexpectedKeys = Object.keys(inputState).filter((key) => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n  unexpectedKeys.forEach((key) => {\n    unexpectedKeyCache[key] = true;\n  });\n  if (action && action.type === actionTypes_default.REPLACE)\n    return;\n  if (unexpectedKeys.length > 0) {\n    return `Unexpected ${unexpectedKeys.length > 1 ? \"keys\" : \"key\"} \"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. Expected to find one of the known reducer keys instead: \"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n  }\n}\nfunction assertReducerShape(reducers) {\n  Object.keys(reducers).forEach((key) => {\n    const reducer = reducers[key];\n    const initialState = reducer(void 0, {\n      type: actionTypes_default.INIT\n    });\n    if (typeof initialState === \"undefined\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);\n    }\n    if (typeof reducer(void 0, {\n      type: actionTypes_default.PROBE_UNKNOWN_ACTION()\n    }) === \"undefined\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. Don't try to handle '${actionTypes_default.INIT}' or other actions in \"redux/*\" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.`);\n    }\n  });\n}\nfunction combineReducers(reducers) {\n  const reducerKeys = Object.keys(reducers);\n  const finalReducers = {};\n  for (let i = 0; i < reducerKeys.length; i++) {\n    const key = reducerKeys[i];\n    if (process.env.NODE_ENV !== \"production\") {\n      if (typeof reducers[key] === \"undefined\") {\n        warning(`No reducer provided for key \"${key}\"`);\n      }\n    }\n    if (typeof reducers[key] === \"function\") {\n      finalReducers[key] = reducers[key];\n    }\n  }\n  const finalReducerKeys = Object.keys(finalReducers);\n  let unexpectedKeyCache;\n  if (process.env.NODE_ENV !== \"production\") {\n    unexpectedKeyCache = {};\n  }\n  let shapeAssertionError;\n  try {\n    assertReducerShape(finalReducers);\n  } catch (e) {\n    shapeAssertionError = e;\n  }\n  return function combination(state = {}, action) {\n    if (shapeAssertionError) {\n      throw shapeAssertionError;\n    }\n    if (process.env.NODE_ENV !== \"production\") {\n      const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n      if (warningMessage) {\n        warning(warningMessage);\n      }\n    }\n    let hasChanged = false;\n    const nextState = {};\n    for (let i = 0; i < finalReducerKeys.length; i++) {\n      const key = finalReducerKeys[i];\n      const reducer = finalReducers[key];\n      const previousStateForKey = state[key];\n      const nextStateForKey = reducer(previousStateForKey, action);\n      if (typeof nextStateForKey === \"undefined\") {\n        const actionType = action && action.type;\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : \"(unknown type)\"}, the slice reducer for key \"${key}\" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.`);\n      }\n      nextState[key] = nextStateForKey;\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n    }\n    hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n    return hasChanged ? nextState : state;\n  };\n}\n\n// src/bindActionCreators.ts\nfunction bindActionCreator(actionCreator, dispatch) {\n  return function(...args) {\n    return dispatch(actionCreator.apply(this, args));\n  };\n}\nfunction bindActionCreators(actionCreators, dispatch) {\n  if (typeof actionCreators === \"function\") {\n    return bindActionCreator(actionCreators, dispatch);\n  }\n  if (typeof actionCreators !== \"object\" || actionCreators === null) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`);\n  }\n  const boundActionCreators = {};\n  for (const key in actionCreators) {\n    const actionCreator = actionCreators[key];\n    if (typeof actionCreator === \"function\") {\n      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n    }\n  }\n  return boundActionCreators;\n}\n\n// src/compose.ts\nfunction compose(...funcs) {\n  if (funcs.length === 0) {\n    return (arg) => arg;\n  }\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n  return funcs.reduce((a, b) => (...args) => a(b(...args)));\n}\n\n// src/applyMiddleware.ts\nfunction applyMiddleware(...middlewares) {\n  return (createStore2) => (reducer, preloadedState) => {\n    const store = createStore2(reducer, preloadedState);\n    let dispatch = () => {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : \"Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.\");\n    };\n    const middlewareAPI = {\n      getState: store.getState,\n      dispatch: (action, ...args) => dispatch(action, ...args)\n    };\n    const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n    dispatch = compose(...chain)(store.dispatch);\n    return {\n      ...store,\n      dispatch\n    };\n  };\n}\n\n// src/utils/isAction.ts\nfunction isAction(action) {\n  return isPlainObject(action) && \"type\" in action && typeof action.type === \"string\";\n}\nexport {\n  actionTypes_default as __DO_NOT_USE__ActionTypes,\n  applyMiddleware,\n  bindActionCreators,\n  combineReducers,\n  compose,\n  createStore,\n  isAction,\n  isPlainObject,\n  legacy_createStore\n};\n//# sourceMappingURL=redux.mjs.map","// The primary entry point assumes we're working with standard ReactDOM/RN, but\n// older versions that do not include `useSyncExternalStore` (React 16.9 - 17.x).\n// Because of that, the useSyncExternalStore compat shim is needed.\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport { setBatch } from './utils/batch';\nimport { initializeUseSelector } from './hooks/useSelector';\nimport { initializeConnect } from './components/connect';\ninitializeUseSelector(useSyncExternalStoreWithSelector);\ninitializeConnect(useSyncExternalStore); // Enable batched updates in our subscriptions for use\n// with standard React renderers (ReactDOM, React Native)\n\nsetBatch(batch);\nexport { batch };\nexport * from './exports';","/** A function that accepts a potential \"extra argument\" value to be injected later,\r\n * and returns an instance of the thunk middleware that uses that value\r\n */\nfunction createThunkMiddleware(extraArgument) {\n  // Standard Redux middleware definition pattern:\n  // See: https://redux.js.org/tutorials/fundamentals/part-4-store#writing-custom-middleware\n  var middleware = function middleware(_ref) {\n    var dispatch = _ref.dispatch,\n        getState = _ref.getState;\n    return function (next) {\n      return function (action) {\n        // The thunk middleware looks for any functions that were passed to `store.dispatch`.\n        // If this \"action\" is really a function, call it and return the result.\n        if (typeof action === 'function') {\n          // Inject the store's `dispatch` and `getState` methods, as well as any \"extra arg\"\n          return action(dispatch, getState, extraArgument);\n        } // Otherwise, pass the action down the middleware chain as usual\n\n\n        return next(action);\n      };\n    };\n  };\n\n  return middleware;\n}\n\nvar thunk = createThunkMiddleware(); // Attach the factory function so users can create a customized version\n// with whatever \"extra arg\" they want to inject into their thunks\n\nthunk.withExtraArgument = createThunkMiddleware;\nexport default thunk;","import { compose } from 'redux';\nfunction extensionComposeStub() {\n  for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n    funcs[_key] = arguments[_key];\n  }\n  if (funcs.length === 0) return undefined;\n  if (typeof funcs[0] === 'object') return compose;\n  return compose(...funcs);\n}\nexport const composeWithDevTools = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : extensionComposeStub;\nexport const devToolsEnhancer = typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__ ? window.__REDUX_DEVTOOLS_EXTENSION__ : function () {\n  return function (noop) {\n    return noop;\n  };\n};\nexport { composeWithDevTools as composeWithDevToolsDevelopmentOnly, devToolsEnhancer as devToolsEnhancerDevelopmentOnly } from './developmentOnly';\nexport { composeWithDevTools as composeWithDevToolsLogOnly, devToolsEnhancer as devToolsEnhancerLogOnly } from './logOnly';\nexport { composeWithDevTools as composeWithDevToolsLogOnlyInProduction, devToolsEnhancer as devToolsEnhancerLogOnlyInProduction } from './logOnlyInProduction';","import {\n  Band,\n  MediaTagRequestStatus,\n  MediaStatus,\n  LoadStyle,\n  TimeMode,\n  WindowId,\n  PlayerMediaStatus,\n} from \"./types\";\nimport baseSkin from \"./baseSkin.json\";\nexport const BANDS: Band[] = [\n  60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000,\n];\n\nexport const WINDOWS: { [key: string]: WindowId } = {\n  MAIN: \"main\",\n  PLAYLIST: \"playlist\",\n  EQUALIZER: \"equalizer\",\n  MILKDROP: \"milkdrop\",\n};\n\nexport const LOAD_STYLE: Record<LoadStyle, LoadStyle> = {\n  BUFFER: \"BUFFER\",\n  PLAY: \"PLAY\",\n  NONE: \"NONE\",\n};\n\n// TODO: Make this an enum?\nexport const MEDIA_TAG_REQUEST_STATUS: Record<\n  MediaTagRequestStatus,\n  MediaTagRequestStatus\n> = {\n  INITIALIZED: \"INITIALIZED\",\n  FAILED: \"FAILED\",\n  COMPLETE: \"COMPLETE\",\n  NOT_REQUESTED: \"NOT_REQUESTED\",\n};\n\nexport const UTF8_ELLIPSIS = \"\\u2026\";\nexport const CHARACTER_WIDTH = 5;\nexport const WINDOW_RESIZE_SEGMENT_WIDTH = 25;\nexport const WINDOW_RESIZE_SEGMENT_HEIGHT = 29;\nexport const WINDOW_HEIGHT = 116;\nexport const WINDOW_WIDTH = 275;\nexport const TRACK_HEIGHT = 13;\nexport const LETTERS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\");\n\nexport const DEFAULT_SKIN = baseSkin;\n\nexport const VISUALIZERS = {\n  OSCILLOSCOPE: \"OSCILLOSCOPE\",\n  BAR: \"BAR\",\n  NONE: \"NONE\",\n  MILKDROP: \"MILKDROP\",\n};\n\nexport const VISUALIZER_ORDER = [\n  VISUALIZERS.BAR,\n  VISUALIZERS.OSCILLOSCOPE, // Order is correct\n  VISUALIZERS.NONE,\n];\n\nexport const TIME_MODE: Record<TimeMode, TimeMode> = {\n  ELAPSED: \"ELAPSED\",\n  REMAINING: \"REMAINING\",\n};\n\nexport const MEDIA_STATUS: Record<MediaStatus, MediaStatus> = {\n  PLAYING: \"PLAYING\",\n  STOPPED: \"STOPPED\",\n  PAUSED: \"PAUSED\",\n};\n\nexport const PLAYER_MEDIA_STATUS: Record<PlayerMediaStatus, PlayerMediaStatus> =\n  {\n    PLAYING: \"PLAYING\",\n    STOPPED: \"STOPPED\",\n    PAUSED: \"PAUSED\",\n    ENDED: \"ENDED\",\n    CLOSED: \"CLOSED\",\n  };\n","import { DEFAULT_SKIN } from \"./constants\";\nimport { WindowInfo } from \"./types\";\n\ninterface Time {\n  minutesFirstDigit: string;\n  minutesSecondDigit: string;\n  secondsFirstDigit: string;\n  secondsSecondDigit: string;\n}\n\ninterface IniData {\n  [section: string]: {\n    [key: string]: string;\n  };\n}\n\nexport function imgFromUrl(url: string): Promise<HTMLImageElement> {\n  return new Promise((resolve, reject) => {\n    const img = new Image();\n    img.onload = () => {\n      resolve(img);\n    };\n    img.onerror = reject;\n    img.src = url;\n  });\n}\n\nexport const getTimeObj = (time: number | null): Time => {\n  if (time == null) {\n    // If we clean up `<MiniTime />` we don't need to do this any more.\n    return {\n      minutesFirstDigit: \" \",\n      minutesSecondDigit: \" \",\n      secondsFirstDigit: \" \",\n      secondsSecondDigit: \" \",\n    };\n  }\n  const minutes = Math.floor(time / 60);\n  const seconds = time % 60;\n\n  const digits =\n    time == null\n      ? [\" \", \" \", \" \", \" \"]\n      : [\n          String(Math.floor(minutes / 10)),\n          String(Math.floor(minutes % 10)),\n          String(Math.floor(seconds / 10)),\n          String(Math.floor(seconds % 10)),\n        ];\n\n  const [\n    minutesFirstDigit,\n    minutesSecondDigit,\n    secondsFirstDigit,\n    secondsSecondDigit,\n  ] = digits;\n\n  return {\n    minutesFirstDigit,\n    minutesSecondDigit,\n    secondsFirstDigit,\n    secondsSecondDigit,\n  };\n};\n\nexport const getTimeStr = (\n  time: number | null,\n  truncate: boolean = true\n): string => {\n  if (time == null) {\n    return \"\";\n  }\n  const {\n    minutesFirstDigit,\n    minutesSecondDigit,\n    secondsFirstDigit,\n    secondsSecondDigit,\n  } = getTimeObj(time);\n\n  return [\n    truncate && minutesFirstDigit === \"0\" ? \"\" : minutesFirstDigit,\n    minutesSecondDigit,\n    \":\",\n    secondsFirstDigit,\n    secondsSecondDigit,\n  ].join(\"\");\n};\n\nexport const parseViscolors = (text: string): string[] => {\n  const entries = text.split(\"\\n\");\n  const regex = /^\\s*(\\d+)\\s*,?\\s*(\\d+)\\s*,?\\s*(\\d+)/;\n  const colors = [...DEFAULT_SKIN.colors];\n  entries\n    .map((line) => regex.exec(line))\n    .filter(Boolean)\n    .map((matches) => (matches as RegExpExecArray).slice(1, 4).join(\",\"))\n    .map((rgb, i) => {\n      colors[i] = `rgb(${rgb})`;\n    });\n  return colors;\n};\n\nconst SECTION_REGEX = /^\\s*\\[(.+?)\\]\\s*$/;\nconst PROPERTY_REGEX = /^\\s*([^;][^=]*)\\s*=\\s*(.*)\\s*$/;\n\nexport const parseIni = (text: string): IniData => {\n  let section: string, match;\n  return text.split(/[\\r\\n]+/g).reduce((data: IniData, line) => {\n    if ((match = line.match(PROPERTY_REGEX)) && section != null) {\n      const key = match[1].trim().toLowerCase();\n      const value = match[2]\n        // Ignore anything after a second `=`\n        // TODO: What if this is inside quotes or escaped?\n        .replace(/\\=.*$/g, \"\")\n        .trim()\n        // Strip quotes\n        // TODO: What about escaped quotes?\n        // TODO: What about unbalanced quotes?\n        .replace(/(^\")|(\"$)|(^')|('$)/g, \"\");\n      data[section][key] = value;\n    } else if ((match = line.match(SECTION_REGEX))) {\n      section = match[1].trim().toLowerCase();\n      data[section] = {};\n    }\n    return data;\n  }, {});\n};\n\nexport const clamp = (value: number, min: number, max: number): number =>\n  Math.min(Math.max(value, min), max);\n\nexport const sum = (values: number[]): number =>\n  values.reduce((total, value) => total + value, 0);\n\nexport function base64FromDataArray(dataArray: Uint8Array): string {\n  return window.btoa(\n    Array.from(dataArray)\n      .map((byte) => String.fromCharCode(byte))\n      .join(\"\")\n  );\n}\n\nexport const base64FromArrayBuffer = (arrayBuffer: ArrayBuffer): string => {\n  return base64FromDataArray(new Uint8Array(arrayBuffer));\n};\n\n// https://stackoverflow.com/a/15832662/1263117\nexport function downloadURI(uri: string, name: string): void {\n  const link = document.createElement(\"a\");\n  link.download = name;\n  link.href = uri;\n  window.document.body.appendChild(link);\n  link.click();\n  window.document.body.removeChild(link);\n}\n\nexport const toPercent = (min: number, max: number, value: number): number =>\n  (value - min) / (max - min);\n\nexport const percentToRange = (percent: number, min: number, max: number) =>\n  min + Math.round(percent * (max - min));\n\nexport const percentToIndex = (percent: number, length: number): number =>\n  percentToRange(percent, 0, length - 1);\n\nconst rebound =\n  (oldMin: number, oldMax: number, newMin: number, newMax: number) =>\n  (oldValue: number): number =>\n    percentToRange(toPercent(oldMin, oldMax, oldValue), newMin, newMax);\n\n// Convert an .eqf value to a 0-100\nexport const normalizeEqBand = rebound(1, 64, 0, 100);\n\n// Convert a 0-100 to an .eqf value\nexport const denormalizeEqBand = rebound(0, 100, 1, 64);\n\n// Merge a `source` object to a `target` recursively\n// TODO: The typing here is a bit of a disaster.\nexport function merge<T extends object, S extends object>(\n  target: T,\n  source: S\n): T & S {\n  const s = source as any;\n  const t = target as any;\n  // Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties\n  for (const key of Object.keys(s as any)) {\n    if (s[key] instanceof Object) Object.assign(s[key], merge(t[key], s[key]));\n  }\n\n  // Join `target` and modified `source`\n  Object.assign(target || {}, source);\n  return target as any;\n}\n\n// Maps a value in a range (defined my min/max) to a value in an array (options).\nexport function segment<V>(\n  min: number,\n  max: number,\n  value: number,\n  newValues: V[]\n): V {\n  const ratio = toPercent(min, max, value);\n  /*\n  | 0 | 1 | 2 |\n  0   1   2   3\n  */\n  return newValues[percentToIndex(ratio, newValues.length)];\n}\n\n// https://bost.ocks.org/mike/shuffle/\n// Shuffle an array in O(n)\nexport function shuffle<T>(array: T[]): T[] {\n  const sorted = [...array];\n  let m = sorted.length;\n\n  // While there remain elements to shuffle…\n  while (m) {\n    // Pick a remaining element…\n    const i = Math.floor(Math.random() * m--);\n\n    // And swap it with the current element.\n    const val = sorted[m];\n    sorted[m] = sorted[i];\n    sorted[i] = val;\n  }\n\n  return sorted;\n}\n\nexport function sort<T>(\n  array: T[],\n  iteratee: (value: T) => number | string\n): T[] {\n  return [...array].sort((a, b) => {\n    const aKey = iteratee(a);\n    const bKey = iteratee(b);\n    if (aKey < bKey) {\n      return -1;\n    } else if (aKey > bKey) {\n      return 1;\n    }\n    return 0;\n  });\n}\n\nexport function moveSelected<V>(\n  arr: V[],\n  isSelected: (index: number) => boolean,\n  offset: number\n): V[] {\n  const newArr = new Array(arr.length);\n  let next = 0;\n  for (let i = 0; i < newArr.length; i++) {\n    const from = i - offset;\n    // Is a value supposed to move here?\n    if (from >= 0 && from < arr.length && isSelected(from)) {\n      newArr[i] = arr[from];\n    } else {\n      while (next < arr.length && isSelected(next)) {\n        next++;\n      }\n      newArr[i] = arr[next];\n      next++;\n    }\n  }\n  return newArr;\n}\n\nexport function spliceIn<T>(original: T[], start: number, newValues: T[]): T[] {\n  const newArr = [...original];\n  newArr.splice(start, 0, ...newValues);\n  return newArr;\n}\n\nexport function replaceAtIndex<T>(arr: T[], index: number, newValue: T): T[] {\n  return [...arr.slice(0, index), newValue, ...arr.slice(index + 1)];\n}\n\nexport function debounce(func: Function, delay: number): Function {\n  let timeout: number;\n  let callbackArgs: any[] = [];\n\n  return function (context: Object, ...args: any[]): void {\n    callbackArgs = args;\n\n    if (timeout != null) {\n      clearTimeout(timeout);\n    }\n    timeout = window.setTimeout(() => {\n      func.apply(context, callbackArgs);\n    }, delay);\n  };\n}\n\n// Trailing edge only throttle\nexport function throttle(func: Function, delay: number): Function {\n  let timeout: number | null = null;\n  let callbackArgs: any[] = [];\n\n  return function (context: Object, ...args: any[]): void {\n    callbackArgs = args;\n\n    if (!timeout) {\n      timeout = window.setTimeout(() => {\n        func.apply(context, callbackArgs);\n        timeout = null;\n      }, delay);\n    }\n  };\n}\n\nlet counter = 0;\nexport function uniqueId() {\n  return counter++;\n}\n\nexport function objectForEach<V>(\n  obj: { [key: string]: V },\n  cb: (value: V, key: string) => void\n): void {\n  Object.keys(obj).forEach((key) => cb(obj[key], key));\n}\n\nexport function objectMap<V, N>(\n  obj: { [key: string]: V },\n  cb: (value: V, key: string) => N\n): { [key: string]: N } {\n  const modified: { [key: string]: N } = {};\n  Object.keys(obj).forEach((key) => (modified[key] = cb(obj[key], key)));\n  return modified;\n}\n\nexport function objectFilter<V>(\n  obj: { [key: string]: V },\n  predicate: (value: V, key: string) => boolean\n): { [key: string]: V } {\n  // TODO: Could return the original reference if no values change\n  return Object.keys(obj).reduce((newObj: { [key: string]: V }, key) => {\n    if (predicate(obj[key], key)) {\n      newObj[key] = obj[key];\n    }\n    return newObj;\n  }, {});\n}\n\nexport const calculateBoundingBox = (windows: WindowInfo[]) => {\n  if (windows.length === 0) {\n    return null;\n  }\n  const windowSizes = windows.map((w) => ({\n    left: w.x,\n    top: w.y,\n    bottom: w.y + w.height,\n    right: w.x + w.width,\n  }));\n  return windowSizes.reduce((b, w) => ({\n    left: Math.min(b.left, w.left),\n    top: Math.min(b.top, w.top),\n    bottom: Math.max(b.bottom, w.bottom),\n    right: Math.max(b.right, w.right),\n  }));\n};\n\nexport function findLastIndex<T>(arr: T[], cb: (val: T) => boolean) {\n  for (let i = arr.length - 1; i >= 0; i--) {\n    if (cb(arr[i])) {\n      return i;\n    }\n  }\n  return -1;\n}\n\nexport function getWindowSize(): { width: number; height: number } {\n  // Apparently this is crazy across browsers.\n  return {\n    width: Math.max(\n      document.body.scrollWidth,\n      document.documentElement!.scrollWidth,\n      document.body.offsetWidth,\n      document.documentElement!.offsetWidth,\n      document.body.clientWidth,\n      document.documentElement!.clientWidth\n    ),\n    height: Math.max(\n      document.body.scrollHeight,\n      document.documentElement!.scrollHeight,\n      document.body.offsetHeight,\n      document.documentElement!.offsetHeight,\n      document.body.clientHeight,\n      document.documentElement!.clientHeight\n    ),\n  };\n}\n\nexport function getScreenSize(): { width: number; height: number } {\n  return {\n    width: window.screen.width,\n    height: window.screen.height,\n  };\n}\n\ntype PosEvent =\n  | MouseEvent\n  | TouchEvent\n  | React.MouseEvent<HTMLElement>\n  | React.TouchEvent<HTMLElement>;\n\nfunction getPos(e: PosEvent): { clientX: number; clientY: number } {\n  switch (e.type) {\n    case \"touchstart\":\n    case \"touchmove\": {\n      const touch =\n        (e as TouchEvent).targetTouches[0] ?? (e as TouchEvent).touches[0];\n      if (touch == null) {\n        // Investigating https://github.com/captbaritone/webamp/issues/1105\n        throw new Error(\"Unexpected touch event with zero touch targets.\");\n      }\n      return touch;\n    }\n    case \"mousedown\":\n    case \"mousemove\": {\n      return e as MouseEvent;\n    }\n    default:\n      throw new Error(`Unexpected event type: ${e.type}`);\n  }\n}\n\nexport function getX(e: PosEvent) {\n  return getPos(e).clientX;\n}\n\nexport function getY(e: PosEvent) {\n  return getPos(e).clientY;\n}\n\nexport function weakMapMemoize<T extends object, R>(\n  func: (value: T) => R\n): (value: T) => R {\n  const cache = new WeakMap();\n  return (value: T) => {\n    if (!cache.has(value)) {\n      cache.set(value, func(value));\n    }\n    return cache.get(value);\n  };\n}\n","import { Action } from \"../types\";\nimport { shuffle, moveSelected } from \"../utils\";\n\nexport interface PlaylistState {\n  trackOrder: number[];\n  lastSelectedIndex: number | null;\n  currentTrack: number | null;\n  selectedTracks: number[];\n}\n\nconst defaultPlaylistState: PlaylistState = {\n  trackOrder: [],\n  currentTrack: null,\n  lastSelectedIndex: null,\n  selectedTracks: [],\n};\n\nconst playlist = (\n  state: PlaylistState = defaultPlaylistState,\n  action: Action\n): PlaylistState => {\n  switch (action.type) {\n    case \"CLICKED_TRACK\":\n      return {\n        ...state,\n        selectedTracks: [state.trackOrder[(action as any).index]],\n        lastSelectedIndex: (action as any).index,\n      };\n    case \"CTRL_CLICKED_TRACK\": {\n      const id = state.trackOrder[(action as any).index];\n      const index = state.selectedTracks.indexOf(id);\n      const newSelectedTracks = [...state.selectedTracks];\n      if (index === -1) {\n        newSelectedTracks.push(id);\n      } else {\n        newSelectedTracks.splice(index, 1);\n      }\n      return {\n        ...state,\n        selectedTracks: newSelectedTracks,\n        // Using this as the lastClickedIndex is kinda funny, since you\n        // may have just _un_selected the track. However, this is what\n        // Winamp 2 does, so we'll copy it.\n        lastSelectedIndex: (action as any).index,\n      };\n    }\n    case \"SHIFT_CLICKED_TRACK\":\n      if (state.lastSelectedIndex == null) {\n        return state;\n      }\n      const clickedIndex = (action as any).index;\n      const start = Math.min(clickedIndex, state.lastSelectedIndex);\n      const end = Math.max(clickedIndex, state.lastSelectedIndex);\n      const selectedTracks = state.trackOrder.slice(start, end + 1);\n      return {\n        ...state,\n        selectedTracks,\n      };\n    case \"SELECT_ALL\":\n      return {\n        ...state,\n        selectedTracks: [...state.trackOrder],\n      };\n    case \"SELECT_ZERO\":\n      return {\n        ...state,\n        selectedTracks: [],\n      };\n    case \"INVERT_SELECTION\":\n      return {\n        ...state,\n        selectedTracks: state.trackOrder.filter(\n          (id) => !state.selectedTracks.includes(id)\n        ),\n      };\n    case \"REMOVE_ALL_TRACKS\":\n      // TODO: Consider disposing of ObjectUrls\n      return {\n        ...state,\n        trackOrder: [],\n        currentTrack: null,\n        selectedTracks: [],\n        lastSelectedIndex: null,\n      };\n    case \"REMOVE_TRACKS\":\n      // TODO: Consider disposing of ObjectUrls\n      const actionIds = new Set((action as any).ids.map(Number));\n      const { currentTrack } = state;\n      return {\n        ...state,\n        trackOrder: state.trackOrder.filter(\n          (trackId) => !actionIds.has(trackId)\n        ),\n        currentTrack: actionIds.has(Number(currentTrack)) ? null : currentTrack,\n        selectedTracks: Array.from(state.selectedTracks).filter((id) =>\n          actionIds.has(id)\n        ),\n        // TODO: This could probably be made to work, but we clear it just to be safe.\n        lastSelectedIndex: null,\n      };\n    case \"REVERSE_LIST\":\n      return {\n        ...state,\n        trackOrder: [...state.trackOrder].reverse(),\n        // TODO: This could probably be made to work, but we clear it just to be safe.\n        lastSelectedIndex: null,\n      };\n    case \"RANDOMIZE_LIST\":\n      return {\n        ...state,\n        trackOrder: shuffle(state.trackOrder),\n      };\n    case \"SET_TRACK_ORDER\":\n      const { trackOrder } = action as any;\n      return { ...state, trackOrder };\n    case \"ADD_TRACK_FROM_URL\":\n      const atIndex =\n        (action as any).atIndex == null\n          ? state.trackOrder.length\n          : (action as any).atIndex;\n      return {\n        ...state,\n        trackOrder: [\n          ...state.trackOrder.slice(0, atIndex),\n          Number((action as any).id),\n          ...state.trackOrder.slice(atIndex),\n        ],\n        // TODO: This could probably be made to work, but we clear it just to be safe.\n        lastSelectedIndex: null,\n      };\n    case \"PLAY_TRACK\":\n    case \"BUFFER_TRACK\":\n      return {\n        ...state,\n        currentTrack: (action as any).id,\n      };\n    case \"DRAG_SELECTED\":\n      return {\n        ...state,\n        trackOrder: moveSelected(\n          state.trackOrder,\n          (i) => state.selectedTracks.includes(state.trackOrder[i]),\n          (action as any).offset\n        ),\n        // TODO: This could probably be made to work, but we clear it just to be safe.\n        lastSelectedIndex: null,\n      };\n    default:\n      return state;\n  }\n};\n\nexport default playlist;\n","import { Action, WindowId, Box, Point } from \"../types\";\nimport { WINDOWS } from \"../constants\";\nimport * as Utils from \"../utils\";\nimport { WindowsSerializedStateV1 } from \"../serializedStates/v1Types\";\n\nexport type WindowPositions = {\n  [windowId: string]: Point;\n};\n\nexport interface WebampWindow {\n  title: string;\n  size: [number, number];\n  open: boolean;\n  shade?: boolean;\n  canResize: boolean;\n  canShade: boolean;\n  canDouble: boolean;\n  hotkey?: string;\n  position: Point;\n}\n\nexport interface WindowInfo extends Box {\n  key: WindowId;\n}\nexport interface WindowsState {\n  focused: WindowId | null;\n  genWindows: { [name: string]: WebampWindow };\n  browserWindowSize: { height: number; width: number };\n  positionsAreRelative: boolean;\n  windowOrder: WindowId[];\n  milkdropEnabled: boolean;\n}\n\nconst defaultWindowsState: WindowsState = {\n  focused: WINDOWS.MAIN,\n  positionsAreRelative: true,\n  genWindows: {\n    // TODO: Remove static capabilities and derive them from ids/generic\n    [WINDOWS.MAIN]: {\n      title: \"Main Window\",\n      size: [0, 0],\n      open: true,\n      shade: false,\n      canResize: false,\n      canShade: true,\n      canDouble: true,\n      hotkey: \"Alt+W\",\n      position: { x: 0, y: 0 },\n    },\n    [WINDOWS.EQUALIZER]: {\n      title: \"Equalizer\",\n      size: [0, 0],\n      open: true,\n      shade: false,\n      canResize: false,\n      canShade: true,\n      canDouble: true,\n      hotkey: \"Alt+G\",\n      position: { x: 0, y: 0 },\n    },\n    [WINDOWS.PLAYLIST]: {\n      title: \"Playlist Editor\",\n      size: [0, 0],\n      open: true,\n      shade: false,\n      canResize: true,\n      canShade: true,\n      canDouble: false,\n      hotkey: \"Alt+E\",\n      position: { x: 0, y: 0 },\n    },\n    [WINDOWS.MILKDROP]: {\n      title: \"Milkdrop\",\n      size: [0, 0],\n      open: false,\n      shade: false,\n      canResize: true,\n      canShade: false,\n      canDouble: false,\n      position: { x: 0, y: 0 },\n    },\n  },\n  browserWindowSize: { width: 0, height: 0 },\n  windowOrder: [\n    WINDOWS.PLAYLIST,\n    WINDOWS.EQUALIZER,\n    WINDOWS.MILKDROP,\n    WINDOWS.MAIN,\n  ],\n  milkdropEnabled: false,\n};\n\nconst windows = (\n  state: WindowsState = defaultWindowsState,\n  action: Action\n): WindowsState => {\n  switch (action.type) {\n    case \"ENABLE_MILKDROP\":\n      return {\n        ...state,\n        milkdropEnabled: true,\n        genWindows: {\n          ...state.genWindows,\n          [WINDOWS.MILKDROP]: {\n            ...state.genWindows[WINDOWS.MILKDROP],\n            open: (action as any).open,\n          },\n        },\n      };\n    case \"SET_FOCUSED_WINDOW\":\n      let windowOrder = state.windowOrder;\n      if ((action as any).window != null) {\n        windowOrder = [\n          ...state.windowOrder.filter(\n            (windowId) => windowId !== (action as any).window\n          ),\n          (action as any).window,\n        ];\n      }\n      return { ...state, focused: (action as any).window, windowOrder };\n    case \"TOGGLE_WINDOW_SHADE_MODE\":\n      const { canShade } = state.genWindows[(action as any).windowId];\n      if (!canShade) {\n        throw new Error(\n          `Tried to shade/unshade a window that cannot be shaded: ${\n            (action as any).windowId\n          }`\n        );\n      }\n      return {\n        ...state,\n        genWindows: {\n          ...state.genWindows,\n          [(action as any).windowId]: {\n            ...state.genWindows[(action as any).windowId],\n            shade: !state.genWindows[(action as any).windowId].shade,\n          },\n        },\n      };\n    case \"TOGGLE_WINDOW\":\n      const windowState = state.genWindows[(action as any).windowId];\n      return {\n        ...state,\n        genWindows: {\n          ...state.genWindows,\n          [(action as any).windowId]: {\n            ...windowState,\n            open: !windowState.open,\n          },\n        },\n      };\n    case \"CLOSE_WINDOW\":\n      return {\n        ...state,\n        genWindows: {\n          ...state.genWindows,\n          [(action as any).windowId]: {\n            ...state.genWindows[(action as any).windowId],\n            open: false,\n          },\n        },\n      };\n    case \"WINDOW_SIZE_CHANGED\":\n      const { canResize } = state.genWindows[(action as any).windowId];\n      if (!canResize) {\n        throw new Error(\n          `Tried to resize a window that cannot be resized: ${\n            (action as any).windowId\n          }`\n        );\n      }\n      return {\n        ...state,\n        genWindows: {\n          ...state.genWindows,\n          [(action as any).windowId]: {\n            ...state.genWindows[(action as any).windowId],\n            size: (action as any).size,\n          },\n        },\n      };\n    case \"UPDATE_WINDOW_POSITIONS\":\n      return {\n        ...state,\n        positionsAreRelative:\n          (action as any).absolute === true\n            ? false\n            : state.positionsAreRelative,\n        genWindows: Utils.objectMap(state.genWindows, (w, windowId) => {\n          const newPosition = (action as any).positions[windowId];\n          if (newPosition == null) {\n            return w;\n          }\n          return { ...w, position: newPosition };\n        }),\n      };\n    case \"RESET_WINDOW_SIZES\":\n      return {\n        ...state,\n        genWindows: Utils.objectMap(state.genWindows, (w) => ({\n          ...w,\n          // Not sure why TypeScript can't figure this out for itself.\n          size: [0, 0] as [number, number],\n        })),\n      };\n    case \"LOAD_SERIALIZED_STATE\": {\n      const { genWindows, focused, positionsAreRelative } = (action as any)\n        .serializedState.windows;\n      return {\n        ...state,\n        positionsAreRelative,\n        genWindows: Utils.objectMap(state.genWindows, (w, windowId) => {\n          const serializedW = genWindows[windowId];\n          if (serializedW == null) {\n            return w;\n          }\n          // Pull out `hidden` since it's been removed from our state.\n          const { hidden, ...rest } = serializedW;\n          return { ...w, ...rest };\n        }),\n        focused,\n      };\n    }\n    case \"BROWSER_WINDOW_SIZE_CHANGED\":\n      return {\n        ...state,\n        browserWindowSize: {\n          height: (action as any).height,\n          width: (action as any).width,\n        },\n      };\n\n    default:\n      return state;\n  }\n};\n\nexport function getSerializedState(\n  state: WindowsState\n): WindowsSerializedStateV1 {\n  return {\n    positionsAreRelative: state.positionsAreRelative,\n    genWindows: Utils.objectMap(state.genWindows, (w) => {\n      return {\n        size: w.size,\n        open: w.open,\n        hidden: false, // Not used any more\n        shade: w.shade || false,\n        position: w.position,\n      };\n    }),\n    focused: state.focused,\n  };\n}\n\nexport default windows;\n","import { Action, PlayerMediaStatus, TimeMode } from \"../types\";\nimport { TIME_MODE, PLAYER_MEDIA_STATUS } from \"../constants\";\nimport { MediaSerializedStateV1 } from \"../serializedStates/v1Types\";\n\nexport interface MediaState {\n  timeMode: TimeMode; // TODO: Convert this to an enum\n  timeElapsed: number;\n  volume: number;\n  balance: number;\n  shuffle: boolean;\n  repeat: boolean;\n  status: PlayerMediaStatus;\n}\n\nconst defaultState = {\n  timeMode: TIME_MODE.ELAPSED,\n  timeElapsed: 0,\n\n  // The winamp ini file declares the default volume as \"200\".\n  // The UI seems to show a default volume near 78, which would\n  // math with the default value being 200 out of 255.\n  volume: Math.round((200 / 255) * 100),\n  balance: 0,\n  shuffle: false,\n  repeat: false,\n  // TODO: Enforce possible values\n  status: PLAYER_MEDIA_STATUS.STOPPED,\n};\n\nconst media = (\n  state: MediaState = defaultState,\n  action: Action\n): MediaState => {\n  switch (action.type) {\n    // TODO: Make these constants\n    case \"PLAY\":\n    case \"IS_PLAYING\":\n      return { ...state, status: PLAYER_MEDIA_STATUS.PLAYING };\n    case \"PAUSE\":\n      return { ...state, status: PLAYER_MEDIA_STATUS.PAUSED };\n    case \"STOP\":\n      return { ...state, status: PLAYER_MEDIA_STATUS.STOPPED };\n    case \"IS_STOPPED\":\n      return { ...state, status: PLAYER_MEDIA_STATUS.ENDED };\n    case \"OPEN_WINAMP\":\n      return { ...state, status: PLAYER_MEDIA_STATUS.STOPPED };\n    case \"CLOSE_WINAMP\":\n      return { ...state, status: PLAYER_MEDIA_STATUS.CLOSED };\n    case \"TOGGLE_TIME_MODE\":\n      const newMode =\n        state.timeMode === TIME_MODE.REMAINING\n          ? TIME_MODE.ELAPSED\n          : TIME_MODE.REMAINING;\n      return { ...state, timeMode: newMode };\n    case \"UPDATE_TIME_ELAPSED\":\n      return { ...state, timeElapsed: (action as any).elapsed };\n    case \"SET_MEDIA\":\n      return {\n        ...state,\n      };\n    case \"SET_VOLUME\":\n      return { ...state, volume: (action as any).volume };\n    case \"SET_BALANCE\":\n      return { ...state, balance: (action as any).balance };\n    case \"TOGGLE_REPEAT\":\n      return { ...state, repeat: !state.repeat };\n    case \"TOGGLE_SHUFFLE\":\n      return { ...state, shuffle: !state.shuffle };\n    case \"LOAD_SERIALIZED_STATE\":\n      return { ...state, ...(action as any).serializedState.media };\n    default:\n      return state;\n  }\n};\n\nexport function getSerializedState(state: MediaState): MediaSerializedStateV1 {\n  const { volume, balance, shuffle, repeat } = state;\n  return { volume, balance, shuffle, repeat };\n}\n\nexport default media;\n","'use strict';\n\nexports.__esModule = true;\nexports.defaultMemoize = defaultMemoize;\nexports.createSelectorCreator = createSelectorCreator;\nexports.createStructuredSelector = createStructuredSelector;\nfunction defaultEqualityCheck(a, b) {\n  return a === b;\n}\n\nfunction areArgumentsShallowlyEqual(equalityCheck, prev, next) {\n  if (prev === null || next === null || prev.length !== next.length) {\n    return false;\n  }\n\n  // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n  var length = prev.length;\n  for (var i = 0; i < length; i++) {\n    if (!equalityCheck(prev[i], next[i])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction defaultMemoize(func) {\n  var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck;\n\n  var lastArgs = null;\n  var lastResult = null;\n  // we reference arguments instead of spreading them for performance reasons\n  return function () {\n    if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {\n      // apply arguments instead of spreading for performance.\n      lastResult = func.apply(null, arguments);\n    }\n\n    lastArgs = arguments;\n    return lastResult;\n  };\n}\n\nfunction getDependencies(funcs) {\n  var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;\n\n  if (!dependencies.every(function (dep) {\n    return typeof dep === 'function';\n  })) {\n    var dependencyTypes = dependencies.map(function (dep) {\n      return typeof dep;\n    }).join(', ');\n    throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']'));\n  }\n\n  return dependencies;\n}\n\nfunction createSelectorCreator(memoize) {\n  for (var _len = arguments.length, memoizeOptions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    memoizeOptions[_key - 1] = arguments[_key];\n  }\n\n  return function () {\n    for (var _len2 = arguments.length, funcs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      funcs[_key2] = arguments[_key2];\n    }\n\n    var recomputations = 0;\n    var resultFunc = funcs.pop();\n    var dependencies = getDependencies(funcs);\n\n    var memoizedResultFunc = memoize.apply(undefined, [function () {\n      recomputations++;\n      // apply arguments instead of spreading for performance.\n      return resultFunc.apply(null, arguments);\n    }].concat(memoizeOptions));\n\n    // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n    var selector = defaultMemoize(function () {\n      var params = [];\n      var length = dependencies.length;\n\n      for (var i = 0; i < length; i++) {\n        // apply arguments instead of spreading and mutate a local list of params for performance.\n        params.push(dependencies[i].apply(null, arguments));\n      }\n\n      // apply arguments instead of spreading for performance.\n      return memoizedResultFunc.apply(null, params);\n    });\n\n    selector.resultFunc = resultFunc;\n    selector.recomputations = function () {\n      return recomputations;\n    };\n    selector.resetRecomputations = function () {\n      return recomputations = 0;\n    };\n    return selector;\n  };\n}\n\nvar createSelector = exports.createSelector = createSelectorCreator(defaultMemoize);\n\nfunction createStructuredSelector(selectors) {\n  var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector;\n\n  if (typeof selectors !== 'object') {\n    throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + typeof selectors));\n  }\n  var objectKeys = Object.keys(selectors);\n  return selectorCreator(objectKeys.map(function (key) {\n    return selectors[key];\n  }), function () {\n    for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      values[_key3] = arguments[_key3];\n    }\n\n    return values.reduce(function (composition, value, index) {\n      composition[objectKeys[index]] = value;\n      return composition;\n    }, {});\n  });\n}","import {\n  Action,\n  SkinImages,\n  Cursors,\n  SkinRegion,\n  GenLetterWidths,\n  PlaylistStyle,\n  SkinGenExColors,\n  DummyVizData,\n} from \"../types\";\nimport * as Utils from \"../utils\";\nimport { createSelector } from \"reselect\";\nimport { DEFAULT_SKIN, VISUALIZER_ORDER } from \"../constants\";\nimport { DisplaySerializedStateV1 } from \"../serializedStates/v1Types\";\n\nexport interface DisplayState {\n  visualizerStyle: number;\n  doubled: boolean;\n  llama: boolean;\n  disableMarquee: boolean;\n  marqueeStep: number;\n  skinImages: SkinImages;\n  skinCursors: Cursors | null;\n  skinRegion: SkinRegion;\n  skinGenLetterWidths: GenLetterWidths | null;\n  skinColors: string[]; // Theoretically this could be a tuple of a specific length\n  skinPlaylistStyle: PlaylistStyle | null;\n  skinGenExColors: SkinGenExColors;\n  working: boolean;\n  closed: boolean;\n  loading: boolean;\n  playlistScrollPosition: number;\n  zIndex: number;\n  dummyVizData: DummyVizData | null;\n}\n\nconst defaultSkinGenExColors = {\n  itemBackground: \"rgb(0,0,0)\",\n  itemForeground: \"rgb(0,255,0)\",\n  windowBackground: \"rgb(56,55,87)\",\n  buttonText: \"rgb(57,57,66)\",\n  windowText: \"rgb(255,255,255)\",\n  divider: \"rgb(117,116,139)\",\n  playlistSelection: \"rgb(0,0,198)\",\n  listHeaderBackground: \"rgb(72,72,120)\",\n  listHeaderText: \"rgb(255,255,255)\",\n  listHeaderFrameTopAndLeft: \"rgb(108,108,180)\",\n  listHeaderFrameBottomAndRight: \"rgb(36,36,60)\",\n  listHeaderFramePressed: \"rgb(18,18,30)\",\n  listHeaderDeadArea: \"rgb(36,36,60)\",\n  scrollbarOne: \"rgb(36,36,60)\",\n  scrollbarTwo: \"rgb(36,36,60)\",\n  pressedScrollbarOne: \"rgb(121,130,150)\",\n  pressedScrollbarTwo: \"rgb(78,88,110)\",\n  scrollbarDeadArea: \"rgb(36,36,60)\",\n  listTextHighlighted: \"rgb(0,198,255)\",\n  listTextHighlightedBackground: \"rgb(0,198,255)\",\n  listTextSelected: \"rgb(0,198,255)\",\n  listTextSelectedBackground: \"rgb(0,198,255)\",\n};\n\nconst defaultDisplayState = {\n  doubled: false,\n  marqueeStep: 0,\n  disableMarquee: false,\n  loading: true,\n  llama: false,\n  closed: false,\n  working: false,\n  skinImages: DEFAULT_SKIN.images,\n  skinColors: DEFAULT_SKIN.colors,\n  skinCursors: null,\n  skinPlaylistStyle: null,\n  skinRegion: {},\n  visualizerStyle: 0, // Index into VISUALIZER_ORDER\n  dummyVizData: null,\n  playlistScrollPosition: 0,\n  skinGenLetterWidths: null, // TODO: Get the default value for this?\n  skinGenExColors: defaultSkinGenExColors,\n  additionalVisualizers: [],\n  zIndex: 0,\n};\n\nconst display = (\n  state: DisplayState = defaultDisplayState,\n  action: Action\n): DisplayState => {\n  switch (action.type) {\n    case \"LOAD_DEFAULT_SKIN\": {\n      const {\n        skinImages,\n        skinColors,\n        skinCursors,\n        skinPlaylistStyle,\n        skinRegion,\n        skinGenLetterWidths,\n        skinGenExColors,\n      } = defaultDisplayState;\n      return {\n        ...state,\n        skinImages,\n        skinColors,\n        skinCursors,\n        skinPlaylistStyle,\n        skinRegion,\n        skinGenLetterWidths,\n        skinGenExColors,\n      };\n    }\n    case \"TOGGLE_DOUBLESIZE_MODE\":\n      return { ...state, doubled: !state.doubled };\n    case \"TOGGLE_LLAMA_MODE\":\n      return { ...state, llama: !state.llama };\n    case \"STEP_MARQUEE\":\n      return state.disableMarquee\n        ? state\n        : { ...state, marqueeStep: state.marqueeStep + 1 };\n    case \"DISABLE_MARQUEE\":\n      return { ...state, disableMarquee: true };\n    case \"STOP_WORKING\":\n      return { ...state, working: false };\n    case \"START_WORKING\":\n      return { ...state, working: true };\n    case \"CLOSE_WINAMP\":\n      return { ...state, closed: true };\n    case \"OPEN_WINAMP\":\n      return { ...state, closed: false };\n    case \"LOADING\":\n      return { ...state, loading: true };\n    case \"LOADED\":\n      return { ...state, loading: false };\n    case \"SET_SKIN_DATA\":\n      const { data } = action as any;\n      return {\n        ...state,\n        loading: false,\n        skinImages: data.skinImages,\n        skinColors: data.skinColors,\n        skinPlaylistStyle: data.skinPlaylistStyle,\n        skinCursors: data.skinCursors,\n        skinRegion: data.skinRegion,\n        skinGenLetterWidths: data.skinGenLetterWidths,\n        skinGenExColors: data.skinGenExColors || defaultSkinGenExColors,\n      };\n    case \"TOGGLE_VISUALIZER_STYLE\":\n      return {\n        ...state,\n        visualizerStyle: (state.visualizerStyle + 1) % VISUALIZER_ORDER.length,\n      };\n    case \"SET_PLAYLIST_SCROLL_POSITION\":\n      return { ...state, playlistScrollPosition: (action as any).position };\n    case \"SET_Z_INDEX\":\n      return { ...state, zIndex: (action as any).zIndex };\n    case \"SET_DUMMY_VIZ_DATA\":\n      return { ...state, dummyVizData: (action as any).data };\n    case \"LOAD_SERIALIZED_STATE\": {\n      const { skinCursors, ...rest } = (action as any).serializedState.display;\n      const upgrade = (url: string) => ({ type: \"cur\", url } as const);\n      const newSkinCursors =\n        skinCursors == null ? null : Utils.objectMap(skinCursors, upgrade);\n      return { ...state, skinCursors: newSkinCursors, ...rest };\n    }\n    default:\n      return state;\n  }\n};\nexport default display;\n\nexport const getSerializedState = (\n  state: DisplayState\n): DisplaySerializedStateV1 => {\n  // My kingdom for a type-safe `_.pick`.\n  const {\n    visualizerStyle,\n    doubled,\n    llama,\n    marqueeStep,\n    skinImages,\n    skinCursors,\n    skinRegion,\n    skinGenLetterWidths,\n    skinColors,\n    skinPlaylistStyle,\n  } = state;\n\n  let newCursors: { [cursor: string]: string } | null = null;\n  if (skinCursors != null) {\n    // @ts-ignore Typescript does not like that we can have `undefined` as\n    // values here. Since this is going to get serialized to JSON (which will\n    // drop undefined) it's fine.\n    // This code is geting removed soon anyway.\n    newCursors = Utils.objectMap(skinCursors, (cursor) => {\n      return cursor.type === \"cur\" ? cursor.url : undefined;\n    });\n  }\n  return {\n    visualizerStyle,\n    doubled,\n    llama,\n    marqueeStep,\n    skinImages,\n    skinCursors: newCursors,\n    skinRegion,\n    skinGenLetterWidths,\n    skinColors,\n    skinPlaylistStyle,\n  };\n};\n\nexport const getVisualizerStyle = createSelector(\n  (state: DisplayState) => state.visualizerStyle,\n  (visualizationStyle): string => {\n    return VISUALIZER_ORDER[visualizationStyle];\n  }\n);\n","import { Action, Slider } from \"../types\";\n\nexport interface UserInputState {\n  focus: string | null; // TODO: Convert this to an enum?\n  bandFocused: Slider | null;\n  scrubPosition: number;\n  userMessage: string | null;\n}\n\nconst defaultUserInput = {\n  focus: null,\n  bandFocused: null,\n  scrubPosition: 0,\n  userMessage: null,\n};\n\nexport const userInput = (\n  state: UserInputState = defaultUserInput,\n  action: Action\n): UserInputState => {\n  switch (action.type) {\n    case \"SET_FOCUS\":\n      return { ...state, focus: (action as any).input, bandFocused: null };\n    case \"SET_BAND_FOCUS\":\n      return {\n        ...state,\n        focus: (action as any).input,\n        bandFocused: (action as any).bandFocused,\n      };\n    case \"UNSET_FOCUS\":\n      return { ...state, focus: null, bandFocused: null };\n    case \"SET_SCRUB_POSITION\":\n      return { ...state, scrubPosition: (action as any).position };\n    case \"SET_USER_MESSAGE\":\n      return { ...state, userMessage: (action as any).message };\n    case \"UNSET_USER_MESSAGE\":\n      return { ...state, userMessage: null };\n    default:\n      return state;\n  }\n};\n\nexport default userInput;\n","import { Slider, Action } from \"./../types\";\nimport { EqualizerSerializedStateV1 } from \"../serializedStates/v1Types\";\n\nexport interface EqualizerState {\n  on: boolean;\n  auto: boolean;\n  sliders: Record<Slider, number>;\n}\n\nconst defaultState = {\n  on: true,\n  auto: false,\n  sliders: {\n    preamp: 50,\n    60: 50,\n    170: 50,\n    310: 50,\n    600: 50,\n    1000: 50,\n    3000: 50,\n    6000: 50,\n    12000: 50,\n    14000: 50,\n    16000: 50,\n  },\n};\n\nconst equalizer = (\n  state: EqualizerState = defaultState,\n  action: Action\n): EqualizerState => {\n  switch (action.type) {\n    case \"SET_BAND_VALUE\":\n      const newSliders = {\n        ...state.sliders,\n        [(action as any).band]: (action as any).value,\n      };\n      return { ...state, sliders: newSliders };\n    case \"SET_EQ_ON\":\n      return { ...state, on: true };\n    case \"SET_EQ_OFF\":\n      return { ...state, on: false };\n    case \"SET_EQ_AUTO\":\n      return { ...state, auto: (action as any).value };\n    case \"LOAD_SERIALIZED_STATE\":\n      return (action as any).serializedState.equalizer || state;\n    default:\n      return state;\n  }\n};\n\nexport function getSerializedState(\n  state: EqualizerState\n): EqualizerSerializedStateV1 {\n  return state;\n}\n\nexport default equalizer;\n","import { Action, Skin } from \"../types\";\n\nexport interface SettingsState {\n  availableSkins: Array<Skin>;\n}\n\nconst defaultSettingsState = {\n  availableSkins: [],\n};\n\nconst settings = (\n  state: SettingsState = defaultSettingsState,\n  action: Action\n): SettingsState => {\n  switch (action.type) {\n    case \"SET_AVAILABLE_SKINS\":\n      return { ...state, availableSkins: (action as any).skins };\n    default:\n      return state;\n  }\n};\n\nexport default settings;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n","import invariant from \"invariant\";\nimport { IMetadataApi } from \"./types\";\nimport { IAudioMetadata } from \"music-metadata-browser\"; // Import music-metadata type definitions\nimport * as Utils from \"./utils\";\n\ntype MediaDataType = string | ArrayBuffer | Blob;\n\nexport async function genMediaTags(\n  file: MediaDataType,\n  musicMetadata: IMetadataApi\n): Promise<IAudioMetadata> {\n  invariant(\n    file != null,\n    \"Attempted to get the tags of media file without passing a file\"\n  );\n\n  const options = {\n    duration: true,\n    skipPostHeaders: true, // avoid unnecessary data to be read\n  };\n\n  if (typeof file === \"string\") {\n    if (\n      \"parseWebStream\" in musicMetadata &&\n      typeof musicMetadata.parseWebStream === \"function\"\n    ) {\n      const response = await fetch(file);\n      if (!response.ok) {\n        throw new Error(\n          `Failed to fetch URL: ${file}, status: ${response.status}`\n        );\n      }\n\n      // https://github.com/Borewit/music-metadata/issues/2455\n      // There's currently an issue where some URLs will fail to parse id3 tags\n      // when using parseWebStream. This approach can work around it. However,\n      // My current assumption is that this is an issue mostly specific to that\n      // individual file and not a wide spread issue, but if we find it happens\n      // more broadly we can deopt to using parseBlob as below.\n\n      // const blob = await response.blob();\n      // return musicMetadata.parseBlob(blob, options);\n\n      const webStream = response.body;\n      if (webStream == null) {\n        throw new Error(\"Response body is null, cannot parse metadata.\");\n      }\n      return musicMetadata.parseWebStream(webStream, undefined, options);\n    }\n    if (\n      \"fetchFromUrl\" in musicMetadata &&\n      typeof musicMetadata.fetchFromUrl === \"function\"\n    ) {\n      return musicMetadata.fetchFromUrl(file, options);\n    }\n    throw new Error(\"No suitable method available to parse URL\");\n  }\n  // Assume Blob\n  return musicMetadata.parseBlob(file as Blob, options);\n}\n\nexport function genMediaDuration(url: string): Promise<number> {\n  invariant(\n    typeof url === \"string\",\n    \"Attempted to get the duration of media file without passing a url\"\n  );\n  return new Promise((resolve, reject) => {\n    // TODO: Does this actually stop downloading the file once it's\n    // got the duration?\n    const audio = document.createElement(\"audio\");\n    audio.crossOrigin = \"anonymous\";\n\n    const durationChange = () => {\n      resolve(audio.duration);\n      audio.removeEventListener(\"durationchange\", durationChange);\n      audio.removeEventListener(\"error\", errorHandler);\n      audio.src = \"\";\n      // TODO: Not sure if this really gets cleaned up.\n    };\n\n    const errorHandler = (e: Event) => {\n      audio.removeEventListener(\"durationchange\", durationChange);\n      audio.removeEventListener(\"error\", errorHandler);\n      reject(e);\n    };\n\n    audio.addEventListener(\"durationchange\", durationChange);\n    audio.addEventListener(\"error\", errorHandler);\n    audio.src = url;\n  });\n}\n\nexport async function genArrayBufferFromFileReference(\n  fileReference: File\n): Promise<any> {\n  invariant(\n    fileReference != null,\n    \"Attempt to get an ArrayBuffer without assigning a fileReference\"\n  );\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onload = () => {\n      resolve(reader.result as ArrayBuffer);\n    };\n    reader.onerror = reject;\n    reader.readAsArrayBuffer(fileReference);\n  });\n}\n\nexport async function genStringFromFileReference(\n  fileReference: File\n): Promise<string> {\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onload = () => {\n      resolve(reader.result as string);\n    };\n    reader.onerror = reject;\n    reader.readAsText(fileReference);\n  });\n}\n\ninterface PromptForFileReferenceOptions {\n  accept?: string | null;\n  directory?: boolean;\n}\n\nexport async function promptForFileReferences(\n  { accept, directory = false }: PromptForFileReferenceOptions = {\n    accept: null,\n    directory: false,\n  }\n): Promise<FileList> {\n  return new Promise<FileList>((resolve) => {\n    // Does this represent a memory leak somehow?\n    // Can this fail? Do we ever reject?\n    const fileInput = document.createElement(\"input\");\n    if (accept) fileInput.setAttribute(\"accept\", accept);\n    fileInput.type = \"file\";\n    fileInput.multiple = true;\n    // @ts-ignore Non-standard\n    fileInput.webkitdirectory = directory;\n    // @ts-ignore Non-standard\n    fileInput.directory = directory;\n    // @ts-ignore Non-standard\n    fileInput.mozdirectory = directory;\n    // Not entirely sure why this is needed, since the input\n    // was just created, but somehow this helps prevent change\n    // events from getting swallowed.\n    // https://stackoverflow.com/a/12102992/1263117\n\n    // @ts-ignore Technically you can't set this to null, it has to be a string.\n    // But I don't feel like retesting it, so I'll leave it as null\n    fileInput.value = null;\n    fileInput.addEventListener(\"change\", (e: Event) => {\n      const files = (<HTMLInputElement>e.target).files;\n      resolve(files as FileList);\n    });\n    fileInput.click();\n  });\n}\n\nfunction urlIsBlobUrl(url: string): boolean {\n  return /^blob:/.test(url);\n}\n\nexport function curUrlFromByteArray(arr: Uint8Array) {\n  const base64 = Utils.base64FromDataArray(arr);\n  return `data:image/x-win-bitmap;base64,${base64}`;\n}\n\n// This is not perfect, but... meh: https://stackoverflow.com/a/36756650/1263117\nexport function filenameFromUrl(url: string): string | null {\n  if (urlIsBlobUrl(url)) {\n    return null;\n  }\n\n  const lastSegment = url.split(\"/\").pop();\n  if (lastSegment == null) {\n    return null;\n  }\n  return lastSegment.split(\"#\")[0].split(\"?\")[0];\n}\n","import { PlaylistTrack } from \"./types\";\nimport * as Utils from \"./utils\";\nimport * as FileUtils from \"./fileUtils\";\n\nexport const trackName = Utils.weakMapMemoize(\n  (track: PlaylistTrack): string => {\n    const { artist, title, defaultName, url } = track;\n    if (artist && title) {\n      return `${artist} - ${title}`;\n    } else if (title) {\n      return title;\n    } else if (defaultName) {\n      return defaultName;\n    } else if (url) {\n      const filename = FileUtils.filenameFromUrl(url);\n      if (filename) {\n        return filename;\n      }\n    }\n    return \"???\";\n  }\n);\n\nexport const trackFilename = Utils.weakMapMemoize(\n  (track: PlaylistTrack): string => {\n    if (track.url) {\n      const urlFilename = FileUtils.filenameFromUrl(track.url);\n      if (urlFilename != null) {\n        return urlFilename;\n      }\n    }\n    if (track.defaultName) {\n      return track.defaultName;\n    }\n    return \"???\";\n  }\n);\n","import { PlaylistTrack, Action } from \"../types\";\nimport { MEDIA_TAG_REQUEST_STATUS } from \"../constants\";\nimport * as TrackUtils from \"../trackUtils\";\n\nexport interface TracksState {\n  [id: string]: PlaylistTrack;\n}\n\nconst defaultPlaylistState: TracksState = {};\n\nconst tracks = (\n  state: TracksState = defaultPlaylistState,\n  action: Action\n): TracksState => {\n  switch (action.type) {\n    case \"ADD_TRACK_FROM_URL\":\n      return {\n        ...state,\n        [(action as any).id]: {\n          id: (action as any).id,\n          defaultName: (action as any).defaultName || null,\n          duration: (action as any).duration ?? null,\n          url: (action as any).url,\n          mediaTagsRequestStatus: MEDIA_TAG_REQUEST_STATUS.INITIALIZED,\n        },\n      };\n    case \"SET_MEDIA\": {\n      const newTrack = {\n        ...state[(action as any).id],\n        duration: (action as any).length,\n      };\n      return {\n        ...state,\n        [(action as any).id]: newTrack,\n      };\n    }\n    case \"MEDIA_TAG_REQUEST_INITIALIZED\":\n      return {\n        ...state,\n        [(action as any).id]: {\n          ...state[(action as any).id],\n          mediaTagsRequestStatus: MEDIA_TAG_REQUEST_STATUS.INITIALIZED,\n        },\n      };\n    case \"MEDIA_TAG_REQUEST_FAILED\":\n      return {\n        ...state,\n        [(action as any).id]: {\n          ...state[(action as any).id],\n          mediaTagsRequestStatus: MEDIA_TAG_REQUEST_STATUS.FAILED,\n        },\n      };\n    case \"SET_MEDIA_DURATION\": {\n      return {\n        ...state,\n        [(action as any).id]: {\n          ...state[(action as any).id],\n          duration: (action as any).duration,\n        },\n      };\n    }\n    case \"SET_MEDIA_TAGS\":\n      const track = state[(action as any).id];\n      const {\n        sampleRate,\n        bitrate,\n        numberOfChannels,\n        title,\n        artist,\n        album,\n        albumArtUrl,\n      } = action as any;\n      const { kbps, khz, channels } = track;\n      return {\n        ...state,\n        [(action as any).id]: {\n          ...track,\n          mediaTagsRequestStatus: MEDIA_TAG_REQUEST_STATUS.COMPLETE,\n          title,\n          artist,\n          album,\n          albumArtUrl,\n          kbps: bitrate != null ? String(Math.round(bitrate / 1000)) : kbps,\n          khz: sampleRate != null ? String(Math.round(sampleRate / 1000)) : khz,\n          channels: numberOfChannels != null ? numberOfChannels : channels,\n        },\n      };\n    default:\n      return state;\n  }\n};\n\nexport default tracks;\n\nexport const getTrackDisplayName = (\n  state: TracksState,\n  id: number | null = null\n): string | null => {\n  if (id == null) {\n    return null;\n  }\n  const track = state[id];\n  if (track == null) {\n    return null;\n  }\n\n  return TrackUtils.trackName(track);\n};\n","import type { AnyWebByteStream, IFileInfo } from \"strtok3\";\nimport { PlaylistState } from \"./reducers/playlist\";\nimport { SettingsState } from \"./reducers/settings\";\nimport { UserInputState } from \"./reducers/userInput\";\nimport { MediaState } from \"./reducers/media\";\nimport { ThunkDispatch, ThunkAction } from \"redux-thunk\";\nimport { DisplayState } from \"./reducers/display\";\nimport {\n  WindowsState,\n  WindowPositions as _WindowPositions,\n  WebampWindow as _WebampWindow,\n  WindowInfo as _WindowInfo,\n} from \"./reducers/windows\";\nimport { EqualizerState } from \"./reducers/equalizer\";\nimport { NetworkState } from \"./reducers/network\";\nimport { MilkdropState } from \"./reducers/milkdrop\";\nimport { SerializedStateV1 } from \"./serializedStates/v1Types\";\nimport { TracksState } from \"./reducers/tracks\";\nimport { IAudioMetadata, IOptions } from \"music-metadata-browser\";\nimport { Store as ReduxStore } from \"redux\";\n\n// Avoid warnings from Webpack: https://github.com/webpack/webpack/issues/7378\nexport type WebampWindow = _WebampWindow;\nexport type WindowInfo = _WindowInfo;\nexport type WindowPositions = _WindowPositions;\n\nexport interface Point {\n  x: number;\n  y: number;\n}\n\nexport interface Diff {\n  x?: number;\n  y?: number;\n}\n\nexport interface BoundingBox {\n  width: number;\n  height: number;\n}\n\nexport interface Box extends Point {\n  width: number;\n  height: number;\n}\n\nexport interface FilePicker {\n  contextMenuName: string;\n  filePicker: () => Promise<Track[]>;\n  requiresNetwork: boolean;\n}\n\nexport type Skin = {\n  url: string;\n  name: string;\n};\n\nexport interface MilkdropMessage {\n  text: string;\n  time: number;\n}\n\nexport type Band =\n  | 60\n  | 170\n  | 310\n  | 600\n  | 1000\n  | 3000\n  | 6000\n  | 12000\n  | 14000\n  | 16000;\n\nexport type Slider = Band | \"preamp\";\n\nexport type CursorImage =\n  | {\n      type: \"cur\";\n      url: string;\n    }\n  | {\n      type: \"ani\";\n      aniData: Uint8Array;\n    };\n\n// TODO: Use a type to ensure these keys mirror the CURSORS constant in\n// skinParser.js\nexport type Cursors = { [cursor: string]: CursorImage };\n\nexport type GenLetterWidths = { [letter: string]: number };\n\nexport interface PlaylistStyle {\n  normal: string;\n  current: string;\n  normalbg: string;\n  selectedbg: string;\n  font: string;\n}\n\n// TODO: Type these keys.\nexport type SkinImages = { [sprite: string]: string };\n\n// TODO: type these keys\nexport type SkinRegion = { [windowName: string]: string[] };\n\nexport type DummyVizData = {\n  0: 11.75;\n  8: 11.0625;\n  16: 8.5;\n  24: 7.3125;\n  32: 6.75;\n  40: 6.4375;\n  48: 6.25;\n  56: 5.875;\n  64: 5.625;\n  72: 5.25;\n  80: 5.125;\n  88: 4.875;\n  96: 4.8125;\n  104: 4.375;\n  112: 3.625;\n  120: 1.5625;\n};\n\nexport interface SkinGenExColors {\n  itemBackground: string;\n  itemForeground: string;\n  windowBackground: string;\n  buttonText: string;\n  windowText: string;\n  divider: string;\n  playlistSelection: string;\n  listHeaderBackground: string;\n  listHeaderText: string;\n  listHeaderFrameTopAndLeft: string;\n  listHeaderFrameBottomAndRight: string;\n  listHeaderFramePressed: string;\n  listHeaderDeadArea: string;\n  scrollbarOne: string;\n  scrollbarTwo: string;\n  pressedScrollbarOne: string;\n  pressedScrollbarTwo: string;\n  scrollbarDeadArea: string;\n  listTextHighlighted: string;\n  listTextHighlightedBackground: string;\n  listTextSelected: string;\n  listTextSelectedBackground: string;\n}\n\nexport type WindowId = \"main\" | \"playlist\" | \"equalizer\" | \"milkdrop\";\n\n// TODO: Fill these out once we actually use them.\nexport type SkinData = {\n  skinImages: SkinImages;\n  skinColors: string[];\n  skinPlaylistStyle: PlaylistStyle;\n  skinCursors: Cursors;\n  skinRegion: SkinRegion;\n  skinGenLetterWidths: GenLetterWidths;\n  skinGenExColors: SkinGenExColors | null;\n};\n\n// This is what we actually pass to butterchurn\nexport type ButterchurnPresetJson = {\n  name: string;\n  butterchurnPresetObject: Object;\n};\n\n// A URL that points to a Butterchurn preset\nexport interface ButterchurnPresetUrl {\n  name: string;\n  butterchurnPresetUrl: string;\n}\n\nexport type LazyButterchurnPresetJson = {\n  name: string;\n  getButterchrunPresetObject: () => Promise<Object>;\n};\n\nexport type Preset =\n  | ButterchurnPresetJson\n  | ButterchurnPresetUrl\n  | LazyButterchurnPresetJson;\n\nexport type StatePreset =\n  | { type: \"RESOLVED\"; name: string; preset: Object }\n  | { type: \"UNRESOLVED\"; name: string; getPreset: () => Promise<Object> };\n\nexport interface ButterchurnOptions {\n  getPresets(): Promise<Preset[]>;\n  importButterchurn(): Promise<any>;\n  importConvertPreset?: () => Promise<{\n    convertPreset(file: string, endpoint: string): Promise<Object>;\n  }>;\n  presetConverterEndpoint?: string;\n  butterchurnOpen: boolean;\n}\n\nexport interface EqfPreset {\n  name: string;\n  hz60: number;\n  hz170: number;\n  hz310: number;\n  hz600: number;\n  hz1000: number;\n  hz3000: number;\n  hz12000: number;\n  hz14000: number;\n  hz16000: number;\n  hz6000: number;\n  preamp: number;\n}\n\nexport enum TransitionType {\n  IMMEDIATE,\n  DEFAULT,\n  USER_PRESET,\n}\n\nexport interface Size {\n  width: number;\n  height: number;\n}\n\nexport type Action =\n  | {\n      type: \"@@init\";\n    }\n  | {\n      type: \"NETWORK_CONNECTED\";\n    }\n  | {\n      type: \"NETWORK_DISCONNECTED\";\n    }\n  | {\n      type: \"SET_AVAILABLE_SKINS\";\n      skins: Array<Skin>;\n    }\n  | {\n      type: \"PLAY\";\n    }\n  | {\n      type: \"IS_PLAYING\";\n    }\n  | {\n      type: \"PAUSE\";\n    }\n  | {\n      type: \"STOP\";\n    }\n  | {\n      type: \"IS_STOPPED\";\n    }\n  | {\n      type: \"TOGGLE_TIME_MODE\";\n    }\n  | {\n      type: \"UPDATE_TIME_ELAPSED\";\n      elapsed: number;\n    }\n  | {\n      type: \"ADD_TRACK_FROM_URL\";\n      atIndex: number | null;\n      id: number;\n      defaultName?: string;\n      duration?: number;\n      url: string;\n    }\n  | {\n      type: \"SET_MEDIA\";\n      id: number;\n      length: number;\n      kbps: string;\n      khz: string;\n      channels: number;\n    }\n  | {\n      type: \"SET_VOLUME\";\n      volume: number;\n    }\n  | {\n      type: \"SET_BALANCE\";\n      balance: number;\n    }\n  | {\n      type: \"TOGGLE_REPEAT\";\n    }\n  | {\n      type: \"TOGGLE_SHUFFLE\";\n    }\n  | {\n      type: \"SET_FOCUS\";\n      input: string;\n    }\n  | {\n      type: \"SET_BAND_FOCUS\";\n      input: string;\n      bandFocused: Slider;\n    }\n  | {\n      type: \"UNSET_FOCUS\";\n    }\n  | {\n      type: \"SET_SCRUB_POSITION\";\n      position: number;\n    }\n  | {\n      type: \"SET_USER_MESSAGE\";\n      message: string;\n    }\n  | {\n      type: \"UNSET_USER_MESSAGE\";\n    }\n  | {\n      type: \"TOGGLE_DOUBLESIZE_MODE\";\n    }\n  | {\n      type: \"TOGGLE_LLAMA_MODE\";\n    }\n  | {\n      type: \"STEP_MARQUEE\";\n    }\n  | {\n      type: \"DISABLE_MARQUEE\";\n    }\n  | {\n      type: \"STOP_WORKING\";\n    }\n  | {\n      type: \"START_WORKING\";\n    }\n  | {\n      type: \"CLOSE_WINAMP\";\n    }\n  | {\n      type: \"OPEN_WINAMP\";\n    }\n  | {\n      type: \"LOADING\";\n    }\n  | {\n      type: \"LOADED\";\n    }\n  | {\n      type: \"SET_SKIN_DATA\";\n      data: SkinData;\n    }\n  | {\n      type: \"TOGGLE_VISUALIZER_STYLE\";\n    }\n  | {\n      type: \"SET_PLAYLIST_SCROLL_POSITION\";\n      position: number;\n    }\n  | {\n      type: \"SET_Z_INDEX\";\n      zIndex: number;\n    }\n  | {\n      type: \"SET_DUMMY_VIZ_DATA\";\n      data: DummyVizData;\n    }\n  | {\n      type: \"SET_BAND_VALUE\";\n      band: Slider;\n      value: number;\n    }\n  | {\n      type: \"SET_EQ_ON\";\n    }\n  | {\n      type: \"SET_EQ_OFF\";\n    }\n  | {\n      type: \"SET_EQ_AUTO\";\n      value: boolean;\n    }\n  | {\n      type: \"SET_FOCUSED_WINDOW\";\n      window: WindowId | null;\n    }\n  | {\n      type: \"TOGGLE_WINDOW_SHADE_MODE\";\n      windowId: WindowId;\n    }\n  | {\n      type: \"TOGGLE_WINDOW\";\n      windowId: WindowId;\n    }\n  | {\n      type: \"CLOSE_WINDOW\";\n      windowId: WindowId;\n    }\n  | {\n      type: \"SET_WINDOW_VISIBILITY\";\n      windowId: WindowId;\n      hidden: boolean;\n    }\n  | {\n      type: \"ADD_GEN_WINDOW\";\n      windowId: WindowId;\n      title: string;\n      open: boolean;\n    }\n  | {\n      type: \"WINDOW_SIZE_CHANGED\";\n      windowId: WindowId;\n      size: [number, number];\n    }\n  | {\n      type: \"UPDATE_WINDOW_POSITIONS\";\n      positions: WindowPositions;\n      absolute?: boolean;\n    }\n  | {\n      type: \"CLICKED_TRACK\";\n      index: number;\n    }\n  | {\n      type: \"CTRL_CLICKED_TRACK\";\n      index: number;\n    }\n  | {\n      type: \"SHIFT_CLICKED_TRACK\";\n      index: number;\n    }\n  | {\n      type: \"SELECT_ALL\";\n    }\n  | {\n      type: \"SELECT_ZERO\";\n    }\n  | {\n      type: \"INVERT_SELECTION\";\n    }\n  | {\n      type: \"REMOVE_ALL_TRACKS\";\n    }\n  | {\n      type: \"REMOVE_TRACKS\";\n      ids: number[];\n    }\n  | {\n      type: \"REVERSE_LIST\";\n    }\n  | {\n      type: \"RANDOMIZE_LIST\";\n    }\n  | {\n      type: \"SET_TRACK_ORDER\";\n      trackOrder: number[];\n    }\n  | {\n      type: \"SET_MEDIA_TAGS\";\n      id: number;\n      title: string;\n      artist: string;\n      album?: string;\n      albumArtUrl?: string | null;\n      numberOfChannels?: number;\n      bitrate?: number;\n      sampleRate?: number;\n    }\n  | {\n      type: \"MEDIA_TAG_REQUEST_INITIALIZED\";\n      id: number;\n    }\n  | {\n      type: \"MEDIA_TAG_REQUEST_FAILED\";\n      id: number;\n    }\n  | {\n      type: \"SET_MEDIA_DURATION\";\n      id: number;\n      duration: number;\n    }\n  | {\n      type: \"PLAY_TRACK\";\n      id: number;\n    }\n  | {\n      type: \"BUFFER_TRACK\";\n      id: number;\n    }\n  | {\n      type: \"DRAG_SELECTED\";\n      offset: number;\n    }\n  | {\n      type: \"PLAY\";\n    }\n  | {\n      type: \"PAUSE\";\n    }\n  | {\n      type: \"SEEK_TO_PERCENT_COMPLETE\";\n      percent: number;\n    }\n  | {\n      type: \"MINIMIZE_WINAMP\";\n    }\n  | {\n      type: \"CLOSE_REQUESTED\";\n      cancel: () => void;\n    }\n  | {\n      type: \"LOAD_SERIALIZED_STATE\";\n      serializedState: SerializedStateV1;\n    }\n  | { type: \"RESET_WINDOW_SIZES\" }\n  | { type: \"BROWSER_WINDOW_SIZE_CHANGED\"; height: number; width: number }\n  | { type: \"LOAD_DEFAULT_SKIN\" }\n  | { type: \"ENABLE_MILKDROP\"; open: boolean }\n  | { type: \"SCHEDULE_MILKDROP_MESSAGE\"; message: string }\n  | {\n      type: \"SET_MILKDROP_DESKTOP\";\n      enabled: boolean;\n    }\n  | {\n      type: \"SET_MILKDROP_FULLSCREEN\";\n      enabled: boolean;\n    }\n  | { type: \"PRESET_REQUESTED\"; index: number; addToHistory: boolean }\n  | {\n      type: \"GOT_BUTTERCHURN_PRESETS\";\n      presets: StatePreset[];\n    }\n  | {\n      type: \"GOT_BUTTERCHURN\";\n      butterchurn: any;\n    }\n  | {\n      type: \"TOGGLE_RANDOMIZE_PRESETS\";\n    }\n  | { type: \"TOGGLE_PRESET_CYCLING\" }\n  | {\n      type: \"RESOLVE_PRESET_AT_INDEX\";\n      index: number;\n      json: Object;\n    }\n  | {\n      type: \"SELECT_PRESET_AT_INDEX\";\n      index: number;\n      transitionType: TransitionType;\n    }\n  | { type: \"TOGGLE_PRESET_OVERLAY\" }\n  | { type: \"MAIN_CONTEXT_MENU_OPENED\" }\n  | {\n      type: \"DROPPED_FILES\";\n      count: number;\n      firstFileName: string | null;\n      windowId: WindowId;\n    }\n  | {\n      type: \"OPENED_FILES\";\n      expectedType: \"SKIN\" | \"MEDIA\" | \"EQ\";\n      count: number;\n      firstFileName: string | null;\n    };\n\nexport type MediaTagRequestStatus =\n  | \"INITIALIZED\"\n  | \"FAILED\"\n  | \"COMPLETE\"\n  | \"NOT_REQUESTED\";\n\n/** The status of the current media. */\nexport type MediaStatus = \"PLAYING\" | \"STOPPED\" | \"PAUSED\";\n\n/**\n * The media status of the player. Similar to MediaStatus but can discriminate\n * between different reasons for being stopped.\n */\nexport type PlayerMediaStatus =\n  | \"PLAYING\"\n  | \"STOPPED\"\n  | \"PAUSED\"\n  /** We have reached the end of the playlist. */\n  | \"ENDED\"\n  /** The player is closed. */\n  | \"CLOSED\";\n\nexport type LoadStyle = \"BUFFER\" | \"PLAY\" | \"NONE\";\n\nexport type TimeMode = \"ELAPSED\" | \"REMAINING\";\n\ninterface TrackInfo {\n  /**\n   * Name to be used until ID3 tags can be resolved.\n   *\n   * If the track has a `url`, and this property is not given,\n   * the filename will be used instead.\n   *\n   * Example: `'My Song'`\n   */\n  defaultName?: string;\n\n  /**\n   * Data to be used _instead_ of trying to fetch ID3 tags.\n   *\n   * Example: `{ artist: 'Jordan Eldredge', title: \"Jordan's Song\" }`\n   */\n  metaData?: {\n    artist: string;\n    title: string;\n    album?: string;\n    albumArtUrl?: string;\n  };\n\n  /**\n   * Duration (in seconds) to be used instead of fetching enough of the file to measure its length.\n   *\n   * Example: 95\n   */\n  duration?: number;\n}\n\nexport interface URLTrack extends TrackInfo {\n  /**\n   * Source URL of the track\n   *\n   * Note: This URL must be served the with correct CORs headers.\n   *\n   * Example: `'https://example.com/song.mp3'`\n   */\n  url: string;\n}\n\nexport interface BlobTrack extends TrackInfo {\n  /**\n   * Blob source of the track\n   */\n  blob: Blob;\n}\n\nexport interface LoadedURLTrack {\n  url: string;\n  metaData: {\n    artist: string | null;\n    title: string | null;\n    album: string | null;\n    albumArtUrl: string | null;\n  };\n}\n\nexport interface Options {\n  /**\n   * An object representing the initial skin to use.\n   *\n   * If omitted, the default skin, included in the bundle, will be used.\n   * Note: This URL must be served the with correct CORs headers.\n   *\n   * Example: `{ url: './path/to/skin.wsz' }`\n   */\n  initialSkin?: {\n    url: string;\n  };\n\n  /**\n   * An array of `Track`s to prepopulate the playlist with.\n   */\n  initialTracks?: Track[];\n\n  /**\n   * An array of objects representing available skins.\n   *\n   * These will appear in the \"Options\" menu under \"Skins\".\n   * Note: These URLs must be served with the correct CORs headers.\n   *\n   * Example: `[ { url: \"./green.wsz\", name: \"Green Dimension V2\" } ]`\n   */\n  availableSkins?: { url: string; name: string }[];\n\n  /**\n   * Configure how the Winamp windows should be laid out on initial render.\n   */\n  windowLayout?: WindowLayout;\n\n  /**\n   * Controls if \"double size mode\", where the fixed sized windows are rendered\n   * at 2x, should be enabled\n   *\n   *  **Note:** In keeping with the original Winamp, double size mode does not\n   *  apply to resizable windows like the equalizer or Milkdrop.\n   *\n   * Default: `false`\n   */\n  enableDoubleSizeMode?: boolean;\n\n  /**\n   * Should global hotkeys be enabled?\n   *\n   * Default: `false`\n   */\n  enableHotkeys?: boolean;\n\n  /**\n   * An array of additional file pickers.\n   *\n   * These will appear in the \"Options\" menu under \"Play\".\n   *\n   * For example, this option can be used to provide a \"Dropbox\" file picker.\n   */\n  filePickers?: [\n    {\n      /**\n       * The name that will appear in the context menu.\n       *\n       * Example: `\"My File Picker...\"`\n       */\n      contextMenuName: string;\n\n      /**\n       * A function which returns a Promise that resolves to an array of `Track`s\n       *\n       * Example: `() => Promise.resolve([{ url: './rick_roll.mp3' }])`\n       */\n      filePicker: () => Promise<Track[]>;\n\n      /**\n       * Indicates if this options should be made available when the user is offline.\n       */\n      requiresNetwork: boolean;\n    }\n  ];\n  zIndex?: number;\n  handleTrackDropEvent?: (\n    e: React.DragEvent<HTMLDivElement>\n  ) => Track[] | null | Promise<Track[] | null>;\n  handleAddUrlEvent?: () => Track[] | null | Promise<Track[] | null>;\n  handleLoadListEvent?: () => Track[] | null | Promise<Track[] | null>;\n  handleSaveListEvent?: (tracks: Track[]) => null | Promise<null>;\n\n  /**\n   * Have Webamp attempt to connect to the browser's media session API.\n   *\n   * This allows OS/hardware level media controls like play/pause/next/previous\n   * and lock screen \"current track\" information to work with Webamp.\n   *\n   * https://developer.mozilla.org/en-US/docs/Web/API/Media_Session_API\n   */\n  enableMediaSession?: boolean;\n}\n\n/**\n * Specifies the initial position and size of a the Winamp windows.\n *\n * Positions are specified in pixels from the top left corner of an imaginary\n * box. On initial render, the collection of visible windows will be centered\n * within the HTML element passed to `Webamp.renderWhenReady(element)`. In other\n * words, the positions given here will determine the _relative_ position of the\n * windows. The absolute position will be determined by the HTML element in\n * which Webamp is centered.\n *\n * Enabling \"shade mode\" for a window that supports it, will cause it to be\n * rendered minimized. Be default windows are not in shade mode.\n *\n * Windows which support resizing can have their size specified. If omitted,\n * they default to their small base size.\n *\n * Windows that are omitted will start closed. Enabling \"closed\" for a window\n * that supports it, will cause it to start closed.\n */\nexport type WindowLayout = {\n  main?: {\n    position: WindowPosition;\n    shadeMode?: boolean;\n    closed?: boolean;\n  };\n  equalizer?: {\n    position: WindowPosition;\n    shadeMode?: boolean;\n    closed?: boolean;\n  };\n  playlist?: {\n    position: WindowPosition;\n    shadeMode?: boolean;\n    size?: WindowSize | null;\n    closed?: boolean;\n  };\n  milkdrop?: {\n    position: WindowPosition;\n    size?: WindowSize | null;\n    closed?: boolean;\n  };\n};\n\n/**\n * Offset from the top left corner of an imaginary box.\n */\nexport type WindowPosition = { top: number; left: number };\n\n/**\n * Resizable windows in Winamp have a base size and can be expanded in\n * increments based on the size of the skin sprite.\n *\n * To specify a window being larger than its base size, use `extraHeight` to\n * specify how many sprite increments to expand the window's height by, and\n * `extraWidth` to specify how many sprite increments to expand the window's\n * width by.\n */\nexport type WindowSize = {\n  extraHeight: number;\n  extraWidth: number;\n};\n\n/**\n * Many methods on the webamp instance deal with track.\n *\n * Either `url` or `blob` must be specified\n */\nexport type Track = URLTrack | BlobTrack;\n\nexport interface PlaylistTrack {\n  id: number;\n  artist?: string;\n  title?: string;\n  album?: string;\n  url: string;\n  defaultName: string | null;\n  albumArtUrl?: string | null;\n  mediaTagsRequestStatus: MediaTagRequestStatus;\n  duration: number | null;\n  kbps?: string;\n  khz: string;\n  channels?: number;\n}\n\nexport interface AppState {\n  userInput: UserInputState;\n  windows: WindowsState;\n  display: DisplayState;\n  settings: SettingsState;\n  equalizer: EqualizerState;\n  playlist: PlaylistState;\n  media: MediaState;\n  network: NetworkState;\n  tracks: TracksState;\n  milkdrop: MilkdropState;\n}\n\nexport type PartialState = any;\n\n/**\n * Type definition of the music-metadata-browser module.\n * Ref: https://github.com/Borewit/music-metadata-browser/blob/master/src/index.ts\n */\nexport interface IMusicMetadataBrowserApi {\n  /**\n   * Parse Web API File\n   * @param {Blob} blob\n   * @param {IOptions} options Parsing options\n   * @returns {Promise<IAudioMetadata>}\n   */\n  parseBlob(blob: Blob, options?: IOptions): Promise<IAudioMetadata>;\n\n  /**\n   * Parse fetched file, using the Web Fetch API\n   * @param {string} audioTrackUrl URL to download the audio track from\n   * @param {IOptions} options Parsing options\n   * @returns {Promise<IAudioMetadata>}\n   */\n  fetchFromUrl(\n    audioTrackUrl: string,\n    options?: IOptions\n  ): Promise<IAudioMetadata>;\n}\n\n/**\n * Type definition of the portion of the music-metadata module we use in Webamp.\n */\nexport interface IMusicMetadataApi {\n  /**\n   * Parse audio from Node Stream.Readable\n   * @param stream - Stream to read the audio track from\n   * @param fileInfo - File information object or MIME-type, e.g.: 'audio/mpeg'\n   * @param options - Parsing options\n   * @returns Metadata\n   */\n  parseWebStream(\n    webStream: AnyWebByteStream,\n    fileInfo?: IFileInfo | string,\n    options?: IOptions\n  ): Promise<IAudioMetadata>;\n\n  /**\n   * Parse Web API File\n   * @param {Blob} blob\n   * @param {IOptions} options Parsing options\n   * @returns {Promise<IAudioMetadata>}\n   */\n  parseBlob(blob: Blob, options?: IOptions): Promise<IAudioMetadata>;\n}\n\nexport type IMetadataApi = IMusicMetadataBrowserApi | IMusicMetadataApi;\n\nexport interface Extras {\n  requireJSZip(): Promise<any>;\n  requireMusicMetadata(): Promise<IMetadataApi>;\n  convertPreset: ((file: File) => Promise<Object>) | null;\n  handleTrackDropEvent?: (\n    e: React.DragEvent<HTMLDivElement>\n  ) => Track[] | null | Promise<Track[] | null>;\n  handleAddUrlEvent?: () => Track[] | null | Promise<Track[] | null>;\n  handleLoadListEvent?: () => Track[] | null | Promise<Track[] | null>;\n  handleSaveListEvent?: (tracks: Track[]) => null | Promise<null>;\n}\n\nexport type GetState = () => AppState;\n\nexport type Thunk = ThunkAction<void, AppState, Extras, Action>;\n\nexport type Dispatch = ThunkDispatch<AppState, Extras, Action>;\n\nexport type Reducer = (state: AppState, action: Action) => AppState;\n\nexport type Middleware = (\n  store: MiddlewareStore\n) => (next: Dispatch) => (action: Action) => any;\n\nexport interface Store extends ReduxStore {\n  subscribe(cb: () => void): () => void;\n  dispatch: Dispatch;\n  getState: GetState;\n}\n\nexport interface MiddlewareStore {\n  dispatch: Dispatch;\n  getState: GetState;\n}\n","import { Action, StatePreset, TransitionType, MilkdropMessage } from \"../types\";\nimport * as Utils from \"../utils\";\n\nexport interface MilkdropState {\n  display: \"WINDOW\" | \"DESKTOP\" | \"FULLSCREEN\";\n  overlay: boolean;\n  presetHistory: number[];\n  presets: StatePreset[];\n  currentPresetIndex: number | null;\n  butterchurn: any;\n  transitionType: TransitionType;\n  randomize: boolean;\n  cycling: boolean;\n  // TODO: This could probably be simplified to just a date and we could assume\n  // the song title is the message.\n  message: MilkdropMessage | null;\n}\n\nconst defaultMilkdropState: MilkdropState = {\n  display: \"WINDOW\",\n  overlay: false,\n  presetHistory: [],\n  presets: [],\n  currentPresetIndex: null,\n  butterchurn: null,\n  transitionType: TransitionType.DEFAULT,\n  randomize: true,\n  cycling: true,\n  message: null,\n};\n\nexport const milkdrop = (\n  state: MilkdropState = defaultMilkdropState,\n  action: Action\n): MilkdropState => {\n  switch (action.type) {\n    case \"SET_MILKDROP_DESKTOP\":\n      return {\n        ...state,\n        display: (action as any).enabled ? \"DESKTOP\" : \"WINDOW\",\n      };\n    case \"SET_MILKDROP_FULLSCREEN\":\n      return {\n        ...state,\n        display: (action as any).enabled ? \"FULLSCREEN\" : \"WINDOW\",\n      };\n    case \"GOT_BUTTERCHURN\":\n      return { ...state, butterchurn: (action as any).butterchurn };\n    case \"GOT_BUTTERCHURN_PRESETS\":\n      return {\n        ...state,\n        presets: state.presets.concat((action as any).presets),\n      };\n    case \"PRESET_REQUESTED\":\n      if ((action as any).addToHistory) {\n        return {\n          ...state,\n          presetHistory: [...state.presetHistory, (action as any).index],\n        };\n      }\n      return {\n        ...state,\n        presetHistory: state.presetHistory.slice(0, -1),\n      };\n    case \"RESOLVE_PRESET_AT_INDEX\":\n      const preset = state.presets[(action as any).index];\n      return {\n        ...state,\n        presets: Utils.replaceAtIndex(state.presets, (action as any).index, {\n          type: \"RESOLVED\",\n          name: preset.name,\n          preset: (action as any).json,\n        }),\n      };\n    case \"SELECT_PRESET_AT_INDEX\":\n      return {\n        ...state,\n        currentPresetIndex: (action as any).index,\n        transitionType: (action as any).transitionType,\n      };\n    case \"TOGGLE_PRESET_OVERLAY\":\n      return { ...state, overlay: !state.overlay };\n    case \"TOGGLE_RANDOMIZE_PRESETS\":\n      return { ...state, randomize: !state.randomize };\n    case \"TOGGLE_PRESET_CYCLING\":\n      return { ...state, cycling: !state.cycling };\n    case \"SCHEDULE_MILKDROP_MESSAGE\":\n      return {\n        ...state,\n        message: {\n          text: (action as any).message,\n          time: Date.now(),\n        },\n      };\n    default:\n      return state;\n  }\n};\n\nexport default milkdrop;\n","import { AppState, Action } from \"../types\";\nimport { Reducer, combineReducers } from \"redux\";\n\nimport playlist from \"./playlist\";\nimport windows from \"./windows\";\nimport media from \"./media\";\nimport display from \"./display\";\nimport userInput from \"./userInput\";\nimport equalizer from \"./equalizer\";\nimport network from \"./network\";\nimport settings from \"./settings\";\nimport tracks from \"./tracks\";\nimport milkdrop from \"./milkdrop\";\n\nconst reducer: Reducer<AppState, Action, never> = combineReducers({\n  userInput,\n  windows,\n  display,\n  settings,\n  equalizer,\n  playlist,\n  media,\n  network,\n  tracks,\n  milkdrop,\n});\n\nexport default reducer;\n","import { Action } from \"../types\";\n\nexport interface NetworkState {\n  connected: boolean;\n}\n\nconst network = (\n  state: NetworkState = { connected: true },\n  action: Action\n): NetworkState => {\n  switch (action.type) {\n    case \"NETWORK_CONNECTED\":\n      return { ...state, connected: true };\n    case \"NETWORK_DISCONNECTED\":\n      return { ...state, connected: false };\n    default:\n      return state;\n  }\n};\n\nexport default network;\n","import { createRoot } from \"react-dom/client\";\nimport { flushSync } from \"react-dom\";\n\ninterface Props {\n  averageTrackLength: string;\n  numberOfTracks: number;\n  playlistLengthSeconds: number;\n  playlistLengthMinutes: number;\n  tracks: string[];\n}\n\nexport const getAsDataURI = (text: string): string =>\n  `data:text/html;base64,${window.btoa(text)}`;\n\n// Replaces deprecated \"noshade\" attribute\nconst noshadeStyle = {\n  height: \"2px\",\n  borderWidth: 0,\n  color: \"gray\",\n  backgroundColor: \"gray\",\n};\n\n// We use all kinds of non-standard attributes and tags. So we create these fake\n// components to trick Typescript.\nconst Body = (props: any) => {\n  // @ts-ignore\n  return <body {...props} />;\n};\n\nconst Font = (props: any) => {\n  // @ts-ignore\n  return <font {...props} />;\n};\n\nconst Hr = (props: any) => {\n  // @ts-ignore\n  return <hr {...props} />;\n};\n\nconst Div = (props: any) => {\n  // @ts-ignore\n  return <div {...props} />;\n};\n\nconst Table = (props: any) => {\n  // @ts-ignore\n  return <table {...props} />;\n};\n\n// TODO: Move <html> tag out to the string creation step in order\n// to avoid the warning.\nconst Playlist = (props: Props) => (\n  <>\n    <Div align=\"center\">\n      <Div className=\"para2\" align=\"center\">\n        <p>WINAMP</p>\n      </Div>\n      <Div className=\"para1\" align=\"center\">\n        <p>playlist</p>\n      </Div>\n    </Div>\n    <Hr\n      align=\"left\"\n      width=\"90%\"\n      size=\"1\"\n      color=\"#FFBF00\"\n      style={noshadeStyle}\n    />\n    <Div align=\"right\">\n      <Table border=\"0\" cellSpacing=\"0\" cellPadding=\"0\" width=\"98%\">\n        {/* Added <tbody> tag */}\n        <tbody>\n          <tr>\n            <td>\n              <small>\n                <small>\n                  <Font face=\"Arial\" color=\"#FFBF00\">\n                    {props.numberOfTracks}\n                  </Font>\n                  <Font color=\"#409FFF\" face=\"Arial\">\n                    {\" track in playlist, average track length: \"}\n                  </Font>\n                  <Font face=\"Arial\" color=\"#FFBF00\">\n                    {props.averageTrackLength}\n                  </Font>\n                </small>\n              </small>\n              <br />\n              <small>\n                <small>\n                  <Font color=\"#409FFF\" face=\"Arial\">\n                    {\"Playlist length: \"}\n                  </Font>\n                  <Font face=\"Arial\" color=\"#FFBF00\">\n                    {props.playlistLengthMinutes}\n                  </Font>\n                  <Font color=\"#409FFF\" face=\"Arial\">\n                    {\" minutes \"}\n                  </Font>\n                  <Font face=\"Arial\" color=\"#FFBF00\">\n                    {props.playlistLengthSeconds}\n                  </Font>\n                  <Font color=\"#409FFF\" face=\"Arial\">\n                    {\" second \"}\n                  </Font>\n                  <br />\n                  <Font color=\"#409FFF\" face=\"Arial\">\n                    Right-click <a href=\"./\">here</a> to save this HTML file.\n                  </Font>\n                </small>\n              </small>\n            </td>\n          </tr>\n        </tbody>\n      </Table>\n    </Div>\n    <blockquote>\n      <p>\n        <Font color=\"#FFBF00\" face=\"Arial\">\n          <big>Playlist files:</big>\n        </Font>\n        {/* Added closing tag here */}\n      </p>\n      <ul>\n        <Font face=\"Arial\" color=\"#FFFFFF\">\n          <small>\n            {props.tracks.map((track) => (\n              <span key={track}>\n                {track}\n                <br />\n              </span>\n            ))}\n            {/* Added closing tag here */}\n          </small>\n        </Font>\n      </ul>\n    </blockquote>\n    <Hr\n      align=\"left\"\n      width=\"90%\"\n      size=\"1\"\n      color=\"#FFBF00\"\n      style={noshadeStyle}\n    />\n  </>\n);\n\nconst createPlaylistHTML = (props: Props): string => {\n  const node = document.createElement(\"div\");\n  const root = createRoot(node);\n  flushSync(() => {\n    root.render(<Playlist {...props} />);\n  });\n  return `\n  <html>\n      <head>\n      <link rel=\"stylesheet\" href=\"null\" />\n      <style type=\"text/css\">\n        body { background: #000040; }\n        .para1 { margin-top: -42px; margin-left: 145px; margin-right: 10px; font-family: \"font2, Arial\"; font-size: 30px; line-height: 35px; text-align: left; color: #E1E1E1; }\n        .para2 { margin-top: 15px; margin-left: 15px; margin-right: 50px; font-family: \"font1, Arial Black\"; font-size: 50px; line-height: 40px; text-align: left; color: #004080; }\n      </style>\n      <title>Winamp Generated PlayList</title>\n    </head>\n     <body bgcolor=\"#000080\" topmargin=\"0\" leftmargin=\"0\" text=\"#FFFFFF\">\n    ${node.innerHTML}\n    </body\n  </html>`;\n};\n\nexport const createPlaylistURL = (props: Props): string =>\n  getAsDataURI(createPlaylistHTML(props));\n","import {\n  AppState,\n  PlaylistTrack,\n  WebampWindow,\n  WindowId,\n  WindowInfo,\n  LoadedURLTrack,\n  WindowPositions,\n  PlaylistStyle,\n  TransitionType,\n  TimeMode,\n  SkinImages,\n  Cursors,\n  SkinRegion,\n  GenLetterWidths,\n  MilkdropMessage,\n  DummyVizData,\n  PlayerMediaStatus,\n  MediaStatus,\n} from \"./types\";\nimport { createSelector, defaultMemoize } from \"reselect\";\nimport * as Utils from \"./utils\";\nimport {\n  BANDS,\n  TRACK_HEIGHT,\n  WINDOW_RESIZE_SEGMENT_WIDTH,\n  WINDOW_RESIZE_SEGMENT_HEIGHT,\n  WINDOW_WIDTH,\n  MEDIA_STATUS,\n  MEDIA_TAG_REQUEST_STATUS,\n  WINDOWS,\n  VISUALIZERS,\n  PLAYER_MEDIA_STATUS,\n} from \"./constants\";\nimport { createPlaylistURL } from \"./playlistHtml\";\nimport * as fromTracks from \"./reducers/tracks\";\nimport * as fromDisplay from \"./reducers/display\";\nimport * as fromEqualizer from \"./reducers/equalizer\";\nimport * as fromMedia from \"./reducers/media\";\nimport * as fromWindows from \"./reducers/windows\";\nimport * as MarqueeUtils from \"./marqueeUtils\";\nimport { generateGraph } from \"./resizeUtils\";\nimport { SerializedStateV1 } from \"./serializedStates/v1Types\";\n\nexport const getSliders = (state: AppState) => state.equalizer.sliders;\n\nexport const getEqfData = createSelector(getSliders, (sliders) => {\n  const preset = {\n    name: \"Entry1\",\n    preamp: Utils.denormalizeEqBand(sliders.preamp),\n    hz60: Utils.denormalizeEqBand(sliders[60]),\n    hz170: Utils.denormalizeEqBand(sliders[170]),\n    hz310: Utils.denormalizeEqBand(sliders[310]),\n    hz600: Utils.denormalizeEqBand(sliders[600]),\n    hz1000: Utils.denormalizeEqBand(sliders[1000]),\n    hz3000: Utils.denormalizeEqBand(sliders[3000]),\n    hz6000: Utils.denormalizeEqBand(sliders[6000]),\n    hz12000: Utils.denormalizeEqBand(sliders[12000]),\n    hz14000: Utils.denormalizeEqBand(sliders[14000]),\n    hz16000: Utils.denormalizeEqBand(sliders[16000]),\n  };\n  const eqfData = {\n    presets: [preset],\n    type: \"Winamp EQ library file v1.1\",\n  };\n  return eqfData;\n});\n\nexport const getTracks = (state: AppState) => state.tracks;\nexport const getTrackUrl = (state: AppState) => {\n  return (id: number): string | null => {\n    return state.tracks[id]?.url;\n  };\n};\nexport const getTrackOrder = (state: AppState) => state.playlist.trackOrder;\n\nexport const getTrackCount = createSelector(\n  getTrackOrder,\n  (trackOrder) => trackOrder.length\n);\n\nexport const getOrderedTracks = createSelector(\n  getTracks,\n  getTrackOrder,\n  (tracks, trackOrder) => trackOrder.filter((id) => tracks[id])\n);\n\nexport const getPlaylistTracks = createSelector(\n  getTracks,\n  getTrackOrder,\n  (tracks, trackOrder) => trackOrder.map((id) => tracks[id]).filter(Boolean)\n);\n\nexport const getUserTracks = createSelector(\n  getTracks,\n  getTrackOrder,\n  (tracks, trackOrder) =>\n    trackOrder.map((id) => {\n      const track = tracks[id];\n\n      return {\n        url: track.url,\n        metaData: {\n          artist: track.artist || \"\",\n          title: track.title || \"\",\n          album: track.album,\n          albumArtUrl: track.albumArtUrl || \"\",\n        },\n      };\n    })\n);\n\nconst getOrderedTrackObjects = createSelector(\n  getTracks,\n  getOrderedTracks,\n  (tracks, trackOrder): PlaylistTrack[] => trackOrder.map((id) => tracks[id])\n);\n\nexport const getSelectedTrackIds = (state: AppState): Array<number> => {\n  return state.playlist.selectedTracks;\n};\n\nexport const getSelectedTrackIdsSet = createSelector(\n  getSelectedTrackIds,\n  (selectedTrackArray): Set<number> => {\n    return new Set(selectedTrackArray);\n  }\n);\n\nexport const getSelectedTrackObjects = createSelector(\n  getOrderedTrackObjects,\n  getSelectedTrackIdsSet,\n  (tracks, selectedIds) => tracks.filter((track) => selectedIds.has(track.id))\n);\n\n// If a duration is `null`, it counts as zero, which seems fine enough.\nconst runningTimeFromTracks = (tracks: PlaylistTrack[]) =>\n  tracks.reduce((time, track) => time + Number(track.duration), 0);\n\nconst getTotalRunningTime = createSelector(\n  getOrderedTrackObjects,\n  runningTimeFromTracks\n);\n\nconst getSelectedRunningTime = createSelector(\n  getSelectedTrackObjects,\n  runningTimeFromTracks\n);\n\n// Note: We should append \"+\" to these values if some of the tracks are of unknown time.\nexport const getRunningTimeMessage = createSelector(\n  getTotalRunningTime,\n  getSelectedRunningTime,\n  (totalRunningTime, selectedRunningTime) =>\n    `${Utils.getTimeStr(selectedRunningTime)}/${Utils.getTimeStr(\n      totalRunningTime\n    )}`\n);\n\n// TODO: use selectors to get memoization\nexport const getCurrentTrackIndex = (state: AppState): number => {\n  const { playlist } = state;\n  if (playlist.currentTrack == null) {\n    return -1;\n  }\n  return playlist.trackOrder.indexOf(playlist.currentTrack);\n};\n\nexport const getCurrentTrackNumber = createSelector(\n  getCurrentTrackIndex,\n  (currentTrackIndex) => currentTrackIndex + 1\n);\n\nexport const getCurrentTrackId = (state: AppState) =>\n  state.playlist.currentTrack;\n\n// TODO: Sigh... Technically, we should detect if we are looping only repeat if we are.\n// I think this would require pre-computing the \"random\" order of a playlist.\nexport const getRandomTrackId = (state: AppState): number | null => {\n  const {\n    playlist: { trackOrder, currentTrack },\n  } = state;\n  if (trackOrder.length === 0) {\n    return null;\n  }\n  let nextId;\n  do {\n    nextId = trackOrder[Math.floor(trackOrder.length * Math.random())];\n  } while (nextId === currentTrack && trackOrder.length > 1);\n  return nextId;\n};\n\nexport const getNextTrackId = (state: AppState, n = 1) => {\n  const {\n    playlist: { trackOrder },\n    media: { repeat, shuffle },\n  } = state;\n  if (shuffle) {\n    return getRandomTrackId(state);\n  }\n  const trackCount = getTrackCount(state);\n  if (trackCount === 0) {\n    return null;\n  }\n\n  const currentIndex = getCurrentTrackIndex(state);\n\n  let nextIndex = currentIndex + n;\n  if (repeat) {\n    nextIndex = nextIndex % trackCount;\n    if (nextIndex < 0) {\n      // Handle wrapping around backwards\n      nextIndex += trackCount;\n    }\n    return trackOrder[nextIndex];\n  }\n\n  if (currentIndex === trackCount - 1 && n > 0) {\n    return null;\n  } else if (currentIndex === 0 && n < 0) {\n    return null;\n  }\n\n  nextIndex = Utils.clamp(nextIndex, 0, trackCount - 1);\n  return trackOrder[nextIndex];\n};\n\nexport const getGenWindows = (\n  state: AppState\n): { [name: string]: WebampWindow } => {\n  return state.windows.genWindows;\n};\n\nexport const getWindowOpen = createSelector(getGenWindows, (genWindows) => {\n  return (windowId: WindowId) => genWindows[windowId].open;\n});\n\nexport const getWindowHidden = createSelector(\n  getMilkdropWindowEnabled,\n  (milkdropWindowEnabled) => {\n    return (windowId: WindowId) => {\n      return windowId === WINDOWS.MILKDROP && !milkdropWindowEnabled;\n    };\n  }\n);\n\nexport const getWindowShade = createSelector(getGenWindows, (genWindows) => {\n  return (windowId: WindowId) => genWindows[windowId].shade;\n});\n\nexport const getWindowSize = createSelector(getGenWindows, (genWindows) => {\n  return (windowId: WindowId) => genWindows[windowId].size;\n});\n\nexport const getWindowPositions = createSelector(\n  getGenWindows,\n  (windows): WindowPositions => Utils.objectMap(windows, (w) => w.position)\n);\n\nconst BASE_WINDOW_HEIGHT = 58;\nexport const getNumberOfVisibleTracks = createSelector(\n  getWindowSize,\n  (getWindowSize_) => {\n    const playlistSize = getWindowSize_(\"playlist\");\n    return Math.floor(\n      (BASE_WINDOW_HEIGHT + WINDOW_RESIZE_SEGMENT_HEIGHT * playlistSize[1]) /\n        TRACK_HEIGHT\n    );\n  }\n);\n\nexport const getOverflowTrackCount = createSelector(\n  getTrackCount,\n  getNumberOfVisibleTracks,\n  (trackCount, numberOfVisibleTracks) =>\n    Math.max(0, trackCount - numberOfVisibleTracks)\n);\n\nconst _getPlaylistScrollPosition = (state: AppState) =>\n  state.display.playlistScrollPosition;\n\nexport const getPlaylistScrollPosition = createSelector(\n  getOverflowTrackCount,\n  _getPlaylistScrollPosition,\n  (overflowTrackCount, playlistScrollPosition) => {\n    if (overflowTrackCount === 0) {\n      return 0;\n    }\n    return Math.round(\n      (Math.round((overflowTrackCount * playlistScrollPosition) / 100) /\n        overflowTrackCount) *\n        100\n    );\n  }\n);\n\nexport const getScrollOffset = createSelector(\n  _getPlaylistScrollPosition,\n  getTrackCount,\n  getNumberOfVisibleTracks,\n  (playlistScrollPosition, trackCount, numberOfVisibleTracks) => {\n    const overflow = Math.max(0, trackCount - numberOfVisibleTracks);\n    return Utils.percentToIndex(playlistScrollPosition / 100, overflow + 1);\n  }\n);\n\nexport const getVisibleTrackIds = createSelector(\n  getScrollOffset,\n  getTrackOrder,\n  getNumberOfVisibleTracks,\n  (offset, trackOrder, numberOfVisibleTracks) =>\n    trackOrder.slice(offset, offset + numberOfVisibleTracks)\n);\n\nexport function getAllTracksAreVisible(state: AppState): boolean {\n  return getVisibleTrackIds(state).length === state.playlist.trackOrder.length;\n}\n\nexport const getTrackIsVisibleFunction = createSelector(\n  getVisibleTrackIds,\n  (visibleTrackIds) => {\n    return (id: number) => visibleTrackIds.includes(id);\n  }\n);\n\nexport const getVisibleTracks = createSelector(\n  getVisibleTrackIds,\n  getTracks,\n  (visibleTrackIds, tracks) => visibleTrackIds.map((id) => tracks[id])\n);\n\nexport const getPlaylist = (state: AppState) => state.playlist;\n\nexport const getDuration = (state: AppState): number | null => {\n  const { playlist, tracks } = state;\n  if (playlist.currentTrack == null) {\n    return null;\n  }\n  const currentTrack = tracks[playlist.currentTrack];\n  return currentTrack && currentTrack.duration;\n};\n\nexport const getTrackDisplayName = createSelector(getTracks, (tracks) => {\n  return defaultMemoize((trackId: number | null) =>\n    fromTracks.getTrackDisplayName(tracks, trackId)\n  );\n});\n\nexport const getCurrentTrackDisplayName = createSelector(\n  getCurrentTrackId,\n  getTrackDisplayName,\n  (id, getName) => {\n    return getName(id);\n  }\n);\nexport const getPlayerMediaStatus = (state: AppState): PlayerMediaStatus => {\n  return state.media.status;\n};\n\nexport const getMediaStatus = createSelector(\n  getPlayerMediaStatus,\n  (status: PlayerMediaStatus): MediaStatus => {\n    switch (status) {\n      case \"PLAYING\":\n      case \"PAUSED\":\n        return status;\n      case \"STOPPED\":\n      case \"ENDED\":\n      case \"CLOSED\":\n        return \"STOPPED\";\n      default:\n        const s: never = status;\n        throw new Error(`Unknown media status: ${s}`);\n    }\n  }\n);\n\nexport const getMediaIsPlaying = (state: AppState) =>\n  state.media.status === MEDIA_STATUS.PLAYING;\n\nexport const getCurrentTrack = createSelector(\n  getCurrentTrackId,\n  getTracks,\n  (trackId, tracks): PlaylistTrack | null => {\n    return trackId == null ? null : tracks[trackId];\n  }\n);\nexport const getCurrentlyPlayingTrackIdIfLoaded = createSelector(\n  getMediaIsPlaying,\n  getCurrentTrack,\n  (mediaIsPlaying, currentTrack) => {\n    if (\n      !mediaIsPlaying ||\n      !currentTrack ||\n      currentTrack.mediaTagsRequestStatus ===\n        MEDIA_TAG_REQUEST_STATUS.INITIALIZED\n    ) {\n      return null;\n    }\n    return currentTrack.id;\n  }\n);\n\nexport const getCurrentTrackInfo = createSelector(\n  getCurrentTrack,\n  (track: PlaylistTrack | null): LoadedURLTrack | null => {\n    if (track == null) {\n      return null;\n    }\n    return {\n      url: track.url,\n      metaData: {\n        title: track.title || null,\n        artist: track.artist || null,\n        album: track.album || null,\n        albumArtUrl: track.albumArtUrl || null,\n      },\n    };\n  }\n);\n\nexport const getMinimalMediaText = createSelector(\n  getCurrentTrackNumber,\n  getCurrentTrackDisplayName,\n  (trackNumber, name) => (name == null ? null : `${trackNumber}. ${name}`)\n);\n\nexport const getMediaText = createSelector(\n  getMinimalMediaText,\n  getDuration,\n  (minimalMediaText, duration) =>\n    minimalMediaText == null\n      ? null\n      : `${minimalMediaText} (${Utils.getTimeStr(duration)})`\n);\n\nexport const getNumberOfTracks = (state: AppState) =>\n  getTrackOrder(state).length;\nconst getPlaylistDuration = createSelector(getTracks, (tracks) =>\n  Object.values(tracks).reduce(\n    (total, track) => total + (track.duration || 0),\n    0\n  )\n);\n\nexport const getPlaylistURL = createSelector(\n  getNumberOfTracks,\n  getPlaylistDuration,\n  getTrackOrder,\n  getTracks,\n  getTrackDisplayName,\n  (numberOfTracks, playlistDuration, trackOrder, tracks, getDisplayName) =>\n    createPlaylistURL({\n      numberOfTracks,\n      averageTrackLength: Utils.getTimeStr(playlistDuration / numberOfTracks),\n      // TODO: Handle hours\n      playlistLengthMinutes: Math.floor(playlistDuration / 60),\n      playlistLengthSeconds: Math.floor(playlistDuration % 60),\n      tracks: trackOrder.map(\n        (id, i) =>\n          `${i + 1}. ${getDisplayName(id)} (${Utils.getTimeStr(\n            tracks[id].duration\n          )})`\n      ),\n    })\n);\n\nconst WINDOW_HEIGHT = 116;\nconst SHADE_WINDOW_HEIGHT = 14;\n\nfunction getWPixelSize(w: WebampWindow, doubled: boolean) {\n  const [width, height] = w.size;\n  const doubledMultiplier = doubled && w.canDouble ? 2 : 1;\n  const pix = {\n    height: WINDOW_HEIGHT + height * WINDOW_RESIZE_SEGMENT_HEIGHT,\n    width: WINDOW_WIDTH + width * WINDOW_RESIZE_SEGMENT_WIDTH,\n  };\n  return {\n    height: (w.shade ? SHADE_WINDOW_HEIGHT : pix.height) * doubledMultiplier,\n    width: pix.width * doubledMultiplier,\n  };\n}\n\nexport function getFocusedWindow(state: AppState): WindowId | null {\n  return state.windows.focused;\n}\n\nexport function getWindowPosition(state: AppState) {\n  return (windowId: WindowId) => state.windows.genWindows[windowId].position;\n}\n\nexport function getPositionsAreRelative(state: AppState) {\n  return state.windows.positionsAreRelative;\n}\n\nexport function getDoubled(state: AppState) {\n  return state.display.doubled;\n}\n\nexport function getLlamaMode(state: AppState) {\n  return state.display.llama;\n}\n\nexport function getZIndex(state: AppState): number {\n  return state.display.zIndex;\n}\n\n// TODO: This is poorly memoized. It invalidates when a window moves.\nexport const getWindowSizes = createSelector(\n  getGenWindows,\n  getDoubled,\n  (windows, doubled) => {\n    return Utils.objectMap(windows, (w) => getWPixelSize(w, doubled));\n  }\n);\n\nexport const getWindowPixelSize = createSelector(getWindowSizes, (sizes) => {\n  return (windowId: WindowId) => sizes[windowId];\n});\n\nconst getWindowOrder = (state: AppState): WindowId[] =>\n  state.windows.windowOrder;\n\nexport const getNormalizedWindowOrder = createSelector(\n  getWindowOrder,\n  getGenWindows,\n  (windowOrder, genWindows): WindowId[] => {\n    return [\n      WINDOWS.MAIN,\n      ...windowOrder.filter(\n        (windowId) => windowId !== WINDOWS.MAIN && genWindows[windowId] != null\n      ),\n    ];\n  }\n);\n\n// TODO: Now that both size and position are stored on genWindows this seems a bit silly.\nexport const getWindowsInfo = createSelector(\n  getWindowSizes,\n  getWindowPositions,\n  getNormalizedWindowOrder,\n  (sizes, positions, windowOrder): WindowInfo[] => {\n    return windowOrder.map((key) => ({\n      key,\n      ...sizes[key],\n      ...positions[key],\n    }));\n  }\n);\n\nexport const getWindowGraph = createSelector(getWindowsInfo, generateGraph);\n\nconst defaultPlaylistStyle = {\n  normal: \"#00FF00\",\n  current: \"#FFFFFF\",\n  normalbg: \"#000000\",\n  selectedbg: \"#0000C6\",\n  font: \"Arial\",\n};\n\nexport function getSkinColors(state: AppState): string[] {\n  return state.display.skinColors;\n}\n\nexport const getSkinPlaylistStyle = (state: AppState): PlaylistStyle => {\n  return state.display.skinPlaylistStyle || defaultPlaylistStyle;\n};\n\nexport const getVisualizerStyle = (state: AppState): string => {\n  const milkdrop = state.windows.genWindows[WINDOWS.MILKDROP];\n  if (milkdrop != null && milkdrop.open) {\n    return VISUALIZERS.MILKDROP;\n  }\n  return fromDisplay.getVisualizerStyle(state.display);\n};\n\nexport const getVolume = (state: AppState) => state.media.volume;\nexport const getBalance = (state: AppState) => state.media.balance;\nexport const getShuffle = (state: AppState) => state.media.shuffle;\nexport const getRepeat = (state: AppState) => state.media.repeat;\n\nexport const getChannels = createSelector(\n  getCurrentTrack,\n  (track: PlaylistTrack | null): number | null => {\n    return track != null ? track.channels || null : null;\n  }\n);\n\nexport const getTimeElapsed = (state: AppState): number => {\n  return state.media.timeElapsed;\n};\n\nexport function getSerlializedState(state: AppState): SerializedStateV1 {\n  return {\n    version: 1,\n    media: fromMedia.getSerializedState(state.media),\n    equalizer: fromEqualizer.getSerializedState(state.equalizer),\n    display: fromDisplay.getSerializedState(state.display),\n    windows: fromWindows.getSerializedState(state.windows),\n  };\n}\n\nexport function getEqualizerEnabled(state: AppState): boolean {\n  return state.equalizer.on;\n}\n\nexport function getEqualizerAuto(state: AppState): boolean {\n  return state.equalizer.auto;\n}\n\nexport function getBrowserWindowSize(state: AppState): {\n  height: number;\n  width: number;\n} {\n  return state.windows.browserWindowSize;\n}\n\nexport const getOpenWindows = createSelector(getGenWindows, (genWindows) =>\n  Utils.objectFilter(genWindows, (w) => w.open)\n);\n\nexport const getStackedLayoutPositions = createSelector(\n  getOpenWindows,\n  getDoubled,\n  (openWindows, doubled): WindowPositions => {\n    let offset = 0;\n    return Utils.objectMap(openWindows, (w) => {\n      const position = { x: 0, y: offset };\n      offset += getWPixelSize(w, doubled).height;\n      return position;\n    });\n  }\n);\n\nexport const getUserInputFocus = (state: AppState): string | null => {\n  return state.userInput.focus;\n};\n\nexport const getUserInputScrubPosition = (state: AppState): number => {\n  return state.userInput.scrubPosition;\n};\n// TODO: Make this a reselect selector\nexport const getMarqueeText = (state: AppState): string => {\n  const defaultText = \"Winamp 2.91\";\n  if (state.userInput.userMessage != null) {\n    return state.userInput.userMessage;\n  }\n  switch (getUserInputFocus(state)) {\n    case \"balance\":\n      return MarqueeUtils.getBalanceText(state.media.balance);\n    case \"volume\":\n      return MarqueeUtils.getVolumeText(state.media.volume);\n    case \"position\":\n      const duration = getDuration(state);\n      if (duration == null) {\n        // This probably can't ever happen.\n        return defaultText;\n      }\n      return MarqueeUtils.getPositionText(\n        duration,\n        getUserInputScrubPosition(state)\n      );\n    case \"double\":\n      return MarqueeUtils.getDoubleSizeModeText(state.display.doubled);\n    case \"eq\":\n      const band = state.userInput.bandFocused;\n      if (band == null) {\n        // This probably can't ever happen.\n        return defaultText;\n      }\n      return MarqueeUtils.getEqText(band, state.equalizer.sliders[band]);\n    default:\n      break;\n  }\n  if (state.playlist.currentTrack != null) {\n    const mediaText = getMediaText(state);\n    if (mediaText == null) {\n      // This probably can't ever happen.\n      return defaultText;\n    }\n    return mediaText;\n  }\n  return defaultText;\n};\n\nexport const getKbps = createSelector(\n  getCurrentTrack,\n  (track: PlaylistTrack | null): string | null => {\n    return track != null ? track.kbps || null : null;\n  }\n);\n\nexport const getKhz = createSelector(\n  getCurrentTrack,\n  (track: PlaylistTrack | null): string | null => {\n    return track != null ? track.khz || null : null;\n  }\n);\n\nexport function getMilkdropMessage(state: AppState): MilkdropMessage | null {\n  return state.milkdrop.message;\n}\n\n// Has Butterchurn been injected?\nexport function getMilkdropEnabled(state: AppState): boolean {\n  return state.windows.milkdropEnabled;\n}\n\nexport function getMilkdropWindowEnabled(state: AppState): boolean {\n  return state.milkdrop.display === \"WINDOW\";\n}\n\nexport function getMilkdropDesktopEnabled(state: AppState): boolean {\n  return state.milkdrop.display === \"DESKTOP\";\n}\n\nexport function getMilkdropFullscreenEnabled(state: AppState): boolean {\n  return state.milkdrop.display === \"FULLSCREEN\";\n}\n\nexport function getPresets(state: AppState): any {\n  return state.milkdrop.presets;\n}\n\nexport function getButterchurn(state: AppState): any {\n  return state.milkdrop.butterchurn;\n}\n\nexport function getPresetTransitionType(state: AppState): TransitionType {\n  return state.milkdrop.transitionType;\n}\n\nexport function getCurrentPresetIndex(state: AppState): number | null {\n  return state.milkdrop.currentPresetIndex;\n}\nexport function getCurrentPreset(state: AppState): any | null {\n  const index = getCurrentPresetIndex(state);\n  if (index == null) {\n    return null;\n  }\n  const preset = state.milkdrop.presets[index];\n  if (preset == null || preset.type === \"UNRESOLVED\") {\n    return null;\n  }\n  return preset.preset;\n}\n\nexport function getPresetNames(state: AppState): string[] {\n  return state.milkdrop.presets.map((preset) => preset.name);\n}\n\nexport function getPresetOverlayOpen(state: AppState): boolean {\n  return state.milkdrop.overlay;\n}\n\nexport function getPresetsAreCycling(state: AppState): boolean {\n  return state.milkdrop.cycling;\n}\n\nexport function getRandomizePresets(state: AppState): boolean {\n  return state.milkdrop.randomize;\n}\n\nexport function getClosed(state: AppState): boolean {\n  return state.display.closed;\n}\n\nexport function getSkinImages(state: AppState): SkinImages {\n  return state.display.skinImages;\n}\n\nexport function getSkinCursors(state: AppState): Cursors | null {\n  return state.display.skinCursors;\n}\n\nexport function getSkinRegion(state: AppState): SkinRegion {\n  return state.display.skinRegion;\n}\n\nexport function getSkinLetterWidths(state: AppState): GenLetterWidths | null {\n  return state.display.skinGenLetterWidths;\n}\n\nexport function getPreampLineUrl(state: AppState): string | null {\n  return state.display.skinImages.EQ_PREAMP_LINE;\n}\n\nexport function getLineColorsUrl(state: AppState): string | null {\n  return state.display.skinImages.EQ_GRAPH_LINE_COLORS;\n}\n\nexport const getPreampLineImage = createSelector(\n  getPreampLineUrl,\n  async (url): Promise<HTMLImageElement | null> => {\n    if (url == null) {\n      return null;\n    }\n    return Utils.imgFromUrl(url);\n  }\n);\n\nexport const getLineColorsImage = createSelector(\n  getLineColorsUrl,\n  async (url): Promise<HTMLImageElement | null> => {\n    if (url == null) {\n      return null;\n    }\n    return Utils.imgFromUrl(url);\n  }\n);\n\nexport function getDummyVizData(state: AppState): DummyVizData | null {\n  return state.display.dummyVizData;\n}\n\nexport function getMarqueeStep(state: AppState): number {\n  return state.display.marqueeStep;\n}\n\nexport function getNetworkConnected(state: AppState): boolean {\n  return state.network.connected;\n}\n\nexport function getTimeMode(state: AppState): TimeMode {\n  return state.media.timeMode;\n}\n\nexport function getLoading(state: AppState): boolean {\n  return state.display.loading;\n}\n\nexport function getWorking(state: AppState): boolean {\n  return state.display.working;\n}\n\nexport function getAvaliableSkins(state: AppState) {\n  return state.settings.availableSkins;\n}\n","import { WindowInfo, WindowId } from \"./types\";\n\ninterface NewGraph {\n  [key: string]: {\n    above: string[];\n    left: string[];\n  };\n}\n\ninterface PositionDiff {\n  [key: string]: {\n    x: number;\n    y: number;\n  };\n}\n\nexport interface SizeDiff {\n  [key: string]: {\n    width: number;\n    height: number;\n  };\n}\n\nexport function getPositionDiff(\n  graph: Graph,\n  sizeDiff: SizeDiff\n): PositionDiff {\n  const newGraph: NewGraph = {};\n  const positionDiff: PositionDiff = {};\n  for (const key of Object.keys(graph)) {\n    newGraph[key] = { above: [], left: [] };\n    positionDiff[key] = { x: 0, y: 0 };\n  }\n\n  // Construct an inverted graph\n  for (const [key, neighbors] of Object.entries(graph)) {\n    const { below, right } = neighbors;\n    if (right != null) {\n      newGraph[right].left.push(key);\n    }\n    if (below != null) {\n      newGraph[below].above.push(key);\n    }\n  }\n\n  function walkRight(key: string) {\n    const node = newGraph[key];\n    const nodeSizeDiff = sizeDiff[key];\n    node.left.forEach((left) => {\n      positionDiff[left].x += nodeSizeDiff.width + positionDiff[key].x;\n      walkRight(left);\n    });\n  }\n\n  function walkDown(key: string) {\n    const node = newGraph[key];\n    const nodeSizeDiff = sizeDiff[key];\n    node.above.forEach((above) => {\n      positionDiff[above].y += nodeSizeDiff.height + positionDiff[key].y;\n      walkDown(above);\n    });\n  }\n\n  // Find disconnected nodes, and walk\n  for (const [key, neighbors] of Object.entries(graph)) {\n    if (neighbors.below == null) {\n      walkDown(key);\n    }\n    if (neighbors.right == null) {\n      walkRight(key);\n    }\n  }\n\n  return positionDiff;\n}\n\ninterface Edges {\n  below?: string;\n  right?: string;\n}\n\nexport interface Graph {\n  // TODO: Ensure this is a WindowId\n  [id: string]: Edges;\n}\n\nexport function generateGraph(windows: WindowInfo[]): Graph {\n  const bottoms: { [offset: number]: WindowInfo[] } = {};\n  const rights: { [offset: number]: WindowInfo[] } = {};\n  for (const w of windows) {\n    const bottom = w.y + w.height;\n    if (bottoms[bottom]) {\n      bottoms[bottom].push(w);\n    } else {\n      bottoms[bottom] = [w];\n    }\n\n    const right = w.x + w.width;\n    if (rights[right]) {\n      rights[right].push(w);\n    } else {\n      rights[right] = [w];\n    }\n  }\n\n  const graph: Graph = {};\n  for (const w of windows) {\n    const edges: Edges = {};\n    const top = w.y;\n    const left = w.x;\n\n    const tops = bottoms[top];\n    const lefts = rights[left];\n    if (tops) {\n      for (const below of tops) {\n        const isToTheLeft = below.x + below.width < w.x;\n        const isToTheRight = below.x > w.x + w.width;\n\n        const overlapsInX = !(isToTheLeft || isToTheRight);\n        if (overlapsInX) {\n          edges.below = below.key;\n          break;\n        }\n      }\n    }\n    if (lefts) {\n      for (const right of lefts) {\n        const isAbove = right.y + right.height < w.y;\n        const isBelow = right.y > w.y + w.height;\n        const overlapsInY = !(isAbove || isBelow);\n        if (overlapsInY) {\n          edges.right = right.key;\n          break;\n        }\n      }\n    }\n\n    graph[w.key] = edges;\n  }\n  return graph;\n}\n","import { Slider } from \"./types\";\n\nimport * as Utils from \"./utils\";\n\nexport const getBalanceText = (balance: number): string => {\n  if (balance === 0) {\n    return \"Balance: Center\";\n  }\n  const direction = balance > 0 ? \"Right\" : \"Left\";\n  return `Balance: ${Math.abs(balance)}% ${direction}`;\n};\n\nexport const getVolumeText = (volume: number): string => `Volume: ${volume}%`;\n\nexport const getPositionText = (\n  duration: number,\n  seekToPercent: number\n): string => {\n  const newElapsedStr = Utils.getTimeStr(\n    (duration * seekToPercent) / 100,\n    false\n  );\n  const durationStr = Utils.getTimeStr(duration, false);\n  return `Seek to: ${newElapsedStr}/${durationStr} (${seekToPercent}%)`;\n};\n\nexport const getDoubleSizeModeText = (enabled: boolean): string =>\n  `${enabled ? \"Disable\" : \"Enable\"} doublesize mode`;\n\nconst formatHz = (hz: number): string =>\n  hz < 1000 ? `${hz}HZ` : `${hz / 1000}KHZ`;\n\n// Format a number as a string, ensuring it has a + or - sign\nconst ensureSign = (num: number): string =>\n  num > 0 ? `+${num}` : num.toString();\n\n// Round to 1 and exactly 1 decimal point\nconst roundToTenths = (num: number): string =>\n  (Math.round(num * 10) / 10).toFixed(1);\n\nexport const getEqText = (band: Slider, level: number): string => {\n  const db = roundToTenths(((level - 50) / 50) * 12);\n  const label = band === \"preamp\" ? \"Preamp\" : formatHz(band);\n  return `EQ: ${label} ${ensureSign(Number(db))} DB`;\n};\n","import { Box, Point, Diff, BoundingBox } from \"./types\";\n\nexport const SNAP_DISTANCE = 15;\n\nexport const top = (box: Box) => box.y;\nexport const bottom = (box: Box) => box.y + box.height;\nexport const left = (box: Box) => box.x;\nexport const right = (box: Box) => box.x + box.width;\n\nexport const near = (a: number, b: number) => Math.abs(a - b) < SNAP_DISTANCE;\n\n// http://stackoverflow.com/a/3269471/1263117\nexport const overlapX = (a: Box, b: Box) =>\n  left(a) <= right(b) + SNAP_DISTANCE && left(b) <= right(a) + SNAP_DISTANCE;\nexport const overlapY = (a: Box, b: Box) =>\n  top(a) <= bottom(b) + SNAP_DISTANCE && top(b) <= bottom(a) + SNAP_DISTANCE;\n\n// Give a new position for `boxA` that snaps it to `boxB` if neede.\nexport const snap = (boxA: Box, boxB: Box) => {\n  let x, y;\n\n  // TODO: Refactor/simplify this code\n  if (overlapY(boxA, boxB)) {\n    if (near(left(boxA), right(boxB))) {\n      x = right(boxB);\n    } else if (near(right(boxA), left(boxB))) {\n      x = left(boxB) - boxA.width;\n    } else if (near(left(boxA), left(boxB))) {\n      x = left(boxB);\n    } else if (near(right(boxA), right(boxB))) {\n      x = right(boxB) - boxA.width;\n    }\n  }\n\n  if (overlapX(boxA, boxB)) {\n    if (near(top(boxA), bottom(boxB))) {\n      y = bottom(boxB);\n    } else if (near(bottom(boxA), top(boxB))) {\n      y = top(boxB) - boxA.height;\n    } else if (near(top(boxA), top(boxB))) {\n      y = top(boxB);\n    } else if (near(bottom(boxA), bottom(boxB))) {\n      y = bottom(boxB) - boxA.height;\n    }\n  }\n  return { x, y };\n};\n\nexport const snapDiff = (a: Box, b: Box): Point => {\n  const newPos = snap(a, b);\n  return {\n    x: newPos.x === undefined ? 0 : newPos.x - a.x,\n    y: newPos.y === undefined ? 0 : newPos.y - a.y,\n  };\n};\n\n// TODO: Use the first x and y combo\nexport const snapDiffManyToMany = (as: Box[], bs: Box[]): Point => {\n  let x: number | undefined = 0;\n  let y: number | undefined = 0;\n  for (const a of as) {\n    for (const b of bs) {\n      const diff = snapDiff(a, b);\n      x = x || diff.x;\n      y = y || diff.y;\n      if (x !== undefined && x > 0 && y !== undefined && y > 0) {\n        break;\n      }\n    }\n  }\n  return { x, y };\n};\n\nexport const snapToMany = (boxA: Box, otherBoxes: Box[]): Diff => {\n  let x: number | undefined;\n  let y: number | undefined;\n\n  otherBoxes.forEach((boxB) => {\n    const newPos = snap(boxA, boxB);\n    x = newPos.x || x;\n    y = newPos.y || y;\n  });\n\n  return { x, y };\n};\n\nexport const snapWithin = (boxA: Box, boundingBox: BoundingBox): Diff => {\n  let x, y;\n\n  if (boxA.x - SNAP_DISTANCE < 0) {\n    x = 0;\n  } else if (boxA.x + boxA.width + SNAP_DISTANCE > boundingBox.width) {\n    x = boundingBox.width - boxA.width;\n  }\n\n  if (boxA.y - SNAP_DISTANCE < 0) {\n    y = 0;\n  } else if (boxA.y + boxA.height + SNAP_DISTANCE > boundingBox.height) {\n    y = boundingBox.height - boxA.height;\n  }\n\n  return { x, y };\n};\n\nexport const snapWithinDiff = (a: Box, b: BoundingBox) => {\n  const newPos = snapWithin(a, b);\n  return {\n    x: newPos.x === undefined ? 0 : newPos.x - a.x,\n    y: newPos.y === undefined ? 0 : newPos.y - a.y,\n  };\n};\n\nexport const applySnap = (original: Point, ...snaps: Diff[]) =>\n  snaps.reduce(\n    (previous, snapped) => ({\n      ...previous,\n      x: typeof snapped.x !== \"undefined\" ? snapped.x : previous.x,\n      y: typeof snapped.y !== \"undefined\" ? snapped.y : previous.y,\n    }),\n    original\n  );\n\nexport const boundingBox = (nodes: Box[]): Box => {\n  const boxes = nodes.slice();\n  const firstNode = boxes.pop();\n  if (firstNode == null) {\n    throw new Error(\"boundingBox must be called with at least one node\");\n  }\n  const bounding = {\n    top: top(firstNode),\n    right: right(firstNode),\n    bottom: bottom(firstNode),\n    left: left(firstNode),\n  };\n\n  boxes.forEach((node) => {\n    bounding.top = Math.min(bounding.top, top(node));\n    bounding.right = Math.max(bounding.right, right(node));\n    bounding.bottom = Math.max(bounding.bottom, bottom(node));\n    bounding.left = Math.min(bounding.left, left(node));\n  });\n\n  return {\n    x: bounding.left,\n    y: bounding.top,\n    width: bounding.right - bounding.left,\n    height: bounding.bottom - bounding.top,\n  };\n};\n\nexport function traceConnection<B extends Box>(\n  areConnected: (candidate: Box, n: Box) => boolean\n) {\n  return (candidates: B[], node: B): Set<B> => {\n    const connected = new Set<B>();\n    const checkNode = (n: B) => {\n      for (const candidate of candidates) {\n        if (!connected.has(candidate) && areConnected(candidate, n)) {\n          connected.add(candidate);\n          checkNode(candidate);\n        }\n      }\n    };\n    checkNode(node);\n    return connected;\n  };\n}\n\nexport const applyDiff = (a: Point, b: Point) => ({\n  x: a.x + b.x,\n  y: a.y + b.y,\n});\n\n// TODO: This should not\nexport const applyMultipleDiffs = (initial: Point, ...diffs: Point[]) => {\n  const metaDiff = diffs.reduce((m, diff) => ({\n    // Use the smallest non-zero diff for each axis.\n    // TODO: Min should be the absolute value\n    x: m.x === 0 || diff.x === 0 ? m.x + diff.x : Math.min(m.x, diff.x),\n    y: m.y === 0 || diff.y === 0 ? m.y + diff.y : Math.min(m.y, diff.y),\n  }));\n  return applyDiff(initial, metaDiff);\n};\n","import * as Selectors from \"../selectors\";\n\nimport * as Utils from \"../utils\";\n\nimport { getPositionDiff, SizeDiff } from \"../resizeUtils\";\nimport { applyDiff } from \"../snapUtils\";\nimport {\n  Action,\n  Thunk,\n  WindowId,\n  WindowPositions,\n  Dispatch,\n  WindowLayout,\n} from \"../types\";\n\n// Dispatch an action and, if needed rearrange the windows to preserve\n// the existing edge relationship.\n//\n// Works by checking the edges before the action is dispatched. Then,\n// after dispatching, calculating what position change would be required\n// to restore those relationships.\nfunction withWindowGraphIntegrity(action: Action): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const graph = Selectors.getWindowGraph(state);\n    const originalSizes = Selectors.getWindowSizes(state);\n\n    dispatch(action);\n\n    const newSizes = Selectors.getWindowSizes(getState());\n    const sizeDiff: SizeDiff = {};\n    for (const window of Object.keys(newSizes)) {\n      const original = originalSizes[window];\n      const current = newSizes[window];\n      sizeDiff[window] = {\n        height: current.height - original.height,\n        width: current.width - original.width,\n      };\n    }\n\n    const positionDiff = getPositionDiff(graph, sizeDiff);\n    const windowPositions = Selectors.getWindowPositions(state);\n\n    const newPositions = Utils.objectMap(windowPositions, (position, key) =>\n      applyDiff(position, positionDiff[key])\n    );\n\n    dispatch(updateWindowPositions(newPositions));\n  };\n}\n\nexport function toggleDoubleSizeMode(): Thunk {\n  return withWindowGraphIntegrity({ type: \"TOGGLE_DOUBLESIZE_MODE\" });\n}\n\nexport function toggleLlamaMode(): Action {\n  return { type: \"TOGGLE_LLAMA_MODE\" };\n}\n\nexport function toggleEqualizerShadeMode(): Thunk {\n  return withWindowGraphIntegrity({\n    type: \"TOGGLE_WINDOW_SHADE_MODE\",\n    windowId: \"equalizer\",\n  });\n}\n\nexport function toggleMainWindowShadeMode(): Thunk {\n  return withWindowGraphIntegrity({\n    type: \"TOGGLE_WINDOW_SHADE_MODE\",\n    windowId: \"main\",\n  });\n}\n\nexport function togglePlaylistShadeMode(): Thunk {\n  return withWindowGraphIntegrity({\n    type: \"TOGGLE_WINDOW_SHADE_MODE\",\n    windowId: \"playlist\",\n  });\n}\n\nexport function closeWindow(windowId: WindowId): Action {\n  return { type: \"CLOSE_WINDOW\", windowId };\n}\n\nexport function setFocusedWindow(window: WindowId | null): Action {\n  return { type: \"SET_FOCUSED_WINDOW\", window };\n}\n\nexport function setWindowSize(\n  windowId: WindowId,\n  size: [number, number]\n): Action {\n  return { type: \"WINDOW_SIZE_CHANGED\", windowId, size };\n}\n\nexport function toggleWindow(windowId: WindowId): Action {\n  return { type: \"TOGGLE_WINDOW\", windowId };\n}\n\nexport function updateWindowPositions(\n  positions: WindowPositions,\n  absolute?: boolean\n): Action {\n  return { type: \"UPDATE_WINDOW_POSITIONS\", positions, absolute };\n}\n\nexport function centerWindowsInContainer(container: HTMLElement): Thunk {\n  return (dispatch, getState) => {\n    if (!Selectors.getPositionsAreRelative(getState())) {\n      return;\n    }\n    const { left, top } = container.getBoundingClientRect();\n    const { scrollWidth: width, scrollHeight: height } = container;\n    dispatch(centerWindows({ left, top, width, height }));\n  };\n}\n\nexport function centerWindowsInView(): Thunk {\n  const height = window.innerHeight;\n  const width = window.innerWidth;\n  return centerWindows({ left: 0, top: 0, width, height });\n}\n\ntype Box = {\n  left: number;\n  top: number;\n  width: number;\n  height: number;\n};\n\nexport function centerWindows({ left, top, width, height }: Box): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const windowsInfo = Selectors.getWindowsInfo(state);\n    const getOpen = Selectors.getWindowOpen(state);\n\n    const offsetLeft = left + window.scrollX;\n    const offsetTop = top + window.scrollY;\n\n    // A layout has been supplied. We will compute the bounding box and\n    // center the given layout.\n    const bounding = Utils.calculateBoundingBox(\n      windowsInfo.filter((w) => getOpen(w.key))\n    );\n\n    if (bounding == null) {\n      // There are no windows to center\n      return;\n    }\n\n    const boxHeight = bounding.bottom - bounding.top;\n    const boxWidth = bounding.right - bounding.left;\n\n    const move = {\n      x: Math.ceil(offsetLeft - bounding.left + (width - boxWidth) / 2),\n      y: Math.ceil(offsetTop - bounding.top + (height - boxHeight) / 2),\n    };\n\n    const newPositions = windowsInfo.reduce(\n      (pos, w) => ({\n        ...pos,\n        [w.key]: { x: move.x + w.x, y: move.y + w.y },\n      }),\n      {}\n    );\n\n    dispatch(updateWindowPositions(newPositions, true));\n  };\n}\n\nexport function browserWindowSizeChanged(size: {\n  height: number;\n  width: number;\n}): Thunk {\n  return (dispatch: Dispatch) => {\n    dispatch({ type: \"BROWSER_WINDOW_SIZE_CHANGED\", ...size });\n    dispatch(ensureWindowsAreOnScreen());\n  };\n}\n\nexport function resetWindowSizes(): Action {\n  return { type: \"RESET_WINDOW_SIZES\" };\n}\n\nexport function stackWindows(): Thunk {\n  return (dispatch, getState) => {\n    dispatch(\n      updateWindowPositions(Selectors.getStackedLayoutPositions(getState()))\n    );\n  };\n}\n\nexport function setWindowLayout(layout?: WindowLayout): Thunk {\n  return (dispatch) => {\n    if (layout == null) {\n      dispatch(stackWindows());\n      return;\n    }\n    for (const id of [\"playlist\", \"milkdrop\"] as const) {\n      const w = layout[id];\n      if (w != null && w.size != null) {\n        const { extraHeight: plusHeight, extraWidth: plusWidth } = w.size;\n        dispatch(setWindowSize(id, [plusWidth, plusHeight]));\n      }\n    }\n    for (const id of [\"main\", \"playlist\", \"equalizer\", \"milkdrop\"] as const) {\n      const w = layout[id];\n      if (w == null || w.closed) {\n        dispatch(closeWindow(id));\n      }\n    }\n    for (const id of [\"main\", \"playlist\", \"equalizer\"] as const) {\n      if (layout[id]?.shadeMode) {\n        dispatch({\n          type: \"TOGGLE_WINDOW_SHADE_MODE\",\n          windowId: id,\n        });\n      }\n    }\n    dispatch(\n      updateWindowPositions(\n        Utils.objectMap(layout, (w) => {\n          // For some reason TypeScript cli thinks this\n          // is nullable, but in VSCode it does not...\n          if (w == null) throw new Error(\"w is null\");\n          return {\n            x: w.position.left,\n            y: w.position.top,\n          };\n        }),\n        false\n      )\n    );\n  };\n}\n\nexport function ensureWindowsAreOnScreen(): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n\n    const windowsInfo = Selectors.getWindowsInfo(state);\n    const getOpen = Selectors.getWindowOpen(state);\n    const { height, width } = Utils.getWindowSize();\n    const bounding = Utils.calculateBoundingBox(\n      windowsInfo.filter((w) => getOpen(w.key))\n    );\n    if (bounding == null) {\n      // There are no windows visible, so there's no work to do.\n      return;\n    }\n    const positions = Selectors.getWindowPositions(state);\n\n    // Are we good?\n    if (\n      bounding.left >= 0 &&\n      bounding.top >= 0 &&\n      bounding.right <= width &&\n      bounding.bottom <= height\n    ) {\n      // My work here is done.\n      return;\n    }\n\n    const boundingHeight = bounding.bottom - bounding.top;\n    const boundingWidth = bounding.right - bounding.left;\n\n    // Could we simply shift all the windows by a constant offset?\n    if (boundingWidth <= width && boundingHeight <= height) {\n      let moveY = 0;\n      let moveX = 0;\n      if (bounding.top <= 0) {\n        moveY = bounding.top;\n      } else if (bounding.bottom > height) {\n        moveY = bounding.bottom - height;\n      }\n\n      if (bounding.left <= 0) {\n        moveX = bounding.left;\n      } else if (bounding.right > width) {\n        moveX = bounding.right - width;\n      }\n\n      const newPositions = Utils.objectMap(positions, (position) => ({\n        x: position.x - moveX,\n        y: position.y - moveY,\n      }));\n\n      dispatch(updateWindowPositions(newPositions));\n      return;\n    }\n\n    // TODO: Try moving the individual groups to try to fit them in\n\n    // I give up. Just reset everything.\n    dispatch(resetWindowSizes());\n    dispatch(stackWindows());\n    dispatch(centerWindowsInView());\n  };\n}\n","export const PRESET_VALUES = [\n    \"hz60\",\n    \"hz170\",\n    \"hz310\",\n    \"hz600\",\n    \"hz1000\",\n    \"hz3000\",\n    \"hz6000\",\n    \"hz12000\",\n    \"hz14000\",\n    \"hz16000\",\n    \"preamp\",\n];\nexport const HEADER = \"Winamp EQ library file v1.1\";\n","import { UTF8_ELLIPSIS } from \"./constants\";\n\nexport type SpriteName = string;\n\nexport interface Sprite {\n  name: SpriteName;\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n}\n\n/* TODO: There are too many \" \" and \"_\" characters */\nexport const FONT_LOOKUP: { [letter: string]: [number, number] } = {\n  a: [0, 0],\n  b: [0, 1],\n  c: [0, 2],\n  d: [0, 3],\n  e: [0, 4],\n  f: [0, 5],\n  g: [0, 6],\n  h: [0, 7],\n  i: [0, 8],\n  j: [0, 9],\n  k: [0, 10],\n  l: [0, 11],\n  m: [0, 12],\n  n: [0, 13],\n  o: [0, 14],\n  p: [0, 15],\n  q: [0, 16],\n  r: [0, 17],\n  s: [0, 18],\n  t: [0, 19],\n  u: [0, 20],\n  v: [0, 21],\n  w: [0, 22],\n  x: [0, 23],\n  y: [0, 24],\n  z: [0, 25],\n  '\"': [0, 26],\n  \"@\": [0, 27],\n  \" \": [0, 30],\n  \"0\": [1, 0],\n  \"1\": [1, 1],\n  \"2\": [1, 2],\n  \"3\": [1, 3],\n  \"4\": [1, 4],\n  \"5\": [1, 5],\n  \"6\": [1, 6],\n  \"7\": [1, 7],\n  \"8\": [1, 8],\n  \"9\": [1, 9],\n  [UTF8_ELLIPSIS]: [1, 10],\n  \".\": [1, 11],\n  \":\": [1, 12],\n  \"(\": [1, 13],\n  \")\": [1, 14],\n  \"-\": [1, 15],\n  \"'\": [1, 16],\n  \"!\": [1, 17],\n  _: [1, 18],\n  \"+\": [1, 19],\n  \"\\\\\": [1, 20],\n  \"/\": [1, 21],\n  \"[\": [1, 22],\n  \"]\": [1, 23],\n  \"^\": [1, 24],\n  \"&\": [1, 25],\n  \"%\": [1, 26],\n  \",\": [1, 27],\n  \"=\": [1, 28],\n  $: [1, 29],\n  \"#\": [1, 30],\n  Å: [2, 0],\n  Ö: [2, 1],\n  Ä: [2, 2],\n  \"?\": [2, 3],\n  \"*\": [2, 4],\n  \"<\": [1, 22],\n  \">\": [1, 23],\n  \"{\": [1, 22],\n  \"}\": [1, 23],\n};\n\nexport const imageConstFromChar = (char: string) =>\n  `CHARACTER_${char.charCodeAt(0)}`;\n\nconst CHAR_X = 5;\nconst CHAR_Y = 6;\n\nconst characterSprites = [];\nfor (const key in FONT_LOOKUP) {\n  if (FONT_LOOKUP.hasOwnProperty(key)) {\n    const position = FONT_LOOKUP[key];\n    characterSprites.push({\n      name: imageConstFromChar(key),\n      y: position[0] * CHAR_Y,\n      x: position[1] * CHAR_X,\n      width: CHAR_X,\n      height: CHAR_Y,\n    });\n  }\n}\n\ninterface SpriteMap {\n  [sheet: string]: Sprite[];\n}\n\nconst sprites: SpriteMap = {\n  BALANCE: [\n    { name: \"MAIN_BALANCE_BACKGROUND\", x: 9, y: 0, width: 38, height: 420 },\n    { name: \"MAIN_BALANCE_THUMB\", x: 15, y: 422, width: 14, height: 11 },\n    { name: \"MAIN_BALANCE_THUMB_ACTIVE\", x: 0, y: 422, width: 14, height: 11 },\n  ],\n  CBUTTONS: [\n    { name: \"MAIN_PREVIOUS_BUTTON\", x: 0, y: 0, width: 23, height: 18 },\n    {\n      name: \"MAIN_PREVIOUS_BUTTON_ACTIVE\",\n      x: 0,\n      y: 18,\n      width: 23,\n      height: 18,\n    },\n    { name: \"MAIN_PLAY_BUTTON\", x: 23, y: 0, width: 23, height: 18 },\n    { name: \"MAIN_PLAY_BUTTON_ACTIVE\", x: 23, y: 18, width: 23, height: 18 },\n    { name: \"MAIN_PAUSE_BUTTON\", x: 46, y: 0, width: 23, height: 18 },\n    { name: \"MAIN_PAUSE_BUTTON_ACTIVE\", x: 46, y: 18, width: 23, height: 18 },\n    { name: \"MAIN_STOP_BUTTON\", x: 69, y: 0, width: 23, height: 18 },\n    { name: \"MAIN_STOP_BUTTON_ACTIVE\", x: 69, y: 18, width: 23, height: 18 },\n    { name: \"MAIN_NEXT_BUTTON\", x: 92, y: 0, width: 23, height: 18 },\n    { name: \"MAIN_NEXT_BUTTON_ACTIVE\", x: 92, y: 18, width: 22, height: 18 },\n    { name: \"MAIN_EJECT_BUTTON\", x: 114, y: 0, width: 22, height: 16 },\n    { name: \"MAIN_EJECT_BUTTON_ACTIVE\", x: 114, y: 16, width: 22, height: 16 },\n  ],\n  MAIN: [\n    { name: \"MAIN_WINDOW_BACKGROUND\", x: 0, y: 0, width: 275, height: 116 },\n  ],\n  MONOSTER: [\n    { name: \"MAIN_STEREO\", x: 0, y: 12, width: 29, height: 12 },\n    { name: \"MAIN_STEREO_SELECTED\", x: 0, y: 0, width: 29, height: 12 },\n    { name: \"MAIN_MONO\", x: 29, y: 12, width: 27, height: 12 },\n    { name: \"MAIN_MONO_SELECTED\", x: 29, y: 0, width: 27, height: 12 },\n  ],\n  NUMBERS: [\n    { name: \"NO_MINUS_SIGN\", x: 9, y: 6, width: 5, height: 1 },\n    { name: \"MINUS_SIGN\", x: 20, y: 6, width: 5, height: 1 },\n    { name: \"DIGIT_0\", x: 0, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_1\", x: 9, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_2\", x: 18, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_3\", x: 27, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_4\", x: 36, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_5\", x: 45, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_6\", x: 54, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_7\", x: 63, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_8\", x: 72, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_9\", x: 81, y: 0, width: 9, height: 13 },\n  ],\n  NUMS_EX: [\n    { name: \"NO_MINUS_SIGN_EX\", x: 90, y: 0, width: 9, height: 13 },\n    { name: \"MINUS_SIGN_EX\", x: 99, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_0_EX\", x: 0, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_1_EX\", x: 9, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_2_EX\", x: 18, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_3_EX\", x: 27, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_4_EX\", x: 36, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_5_EX\", x: 45, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_6_EX\", x: 54, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_7_EX\", x: 63, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_8_EX\", x: 72, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_9_EX\", x: 81, y: 0, width: 9, height: 13 },\n  ],\n  PLAYPAUS: [\n    { name: \"MAIN_PLAYING_INDICATOR\", x: 0, y: 0, width: 9, height: 9 },\n    { name: \"MAIN_PAUSED_INDICATOR\", x: 9, y: 0, width: 9, height: 9 },\n    { name: \"MAIN_STOPPED_INDICATOR\", x: 18, y: 0, width: 9, height: 9 },\n    { name: \"MAIN_NOT_WORKING_INDICATOR\", x: 36, y: 0, width: 9, height: 9 },\n    { name: \"MAIN_WORKING_INDICATOR\", x: 39, y: 0, width: 9, height: 9 },\n  ],\n  PLEDIT: [\n    { name: \"PLAYLIST_TOP_TILE\", x: 127, y: 21, width: 25, height: 20 },\n    { name: \"PLAYLIST_TOP_LEFT_CORNER\", x: 0, y: 21, width: 25, height: 20 },\n    { name: \"PLAYLIST_TITLE_BAR\", x: 26, y: 21, width: 100, height: 20 },\n    {\n      name: \"PLAYLIST_TOP_RIGHT_CORNER\",\n      x: 153,\n      y: 21,\n      width: 25,\n      height: 20,\n    },\n    {\n      name: \"PLAYLIST_TOP_TILE_SELECTED\",\n      x: 127,\n      y: 0,\n      width: 25,\n      height: 20,\n    },\n    { name: \"PLAYLIST_TOP_LEFT_SELECTED\", x: 0, y: 0, width: 25, height: 20 },\n    {\n      name: \"PLAYLIST_TITLE_BAR_SELECTED\",\n      x: 26,\n      y: 0,\n      width: 100,\n      height: 20,\n    },\n    {\n      name: \"PLAYLIST_TOP_RIGHT_CORNER_SELECTED\",\n      x: 153,\n      y: 0,\n      width: 25,\n      height: 20,\n    },\n    { name: \"PLAYLIST_LEFT_TILE\", x: 0, y: 42, width: 12, height: 29 },\n    { name: \"PLAYLIST_RIGHT_TILE\", x: 31, y: 42, width: 20, height: 29 },\n    { name: \"PLAYLIST_BOTTOM_TILE\", x: 179, y: 0, width: 25, height: 38 },\n    {\n      name: \"PLAYLIST_BOTTOM_LEFT_CORNER\",\n      x: 0,\n      y: 72,\n      width: 125,\n      height: 38,\n    },\n    {\n      name: \"PLAYLIST_BOTTOM_RIGHT_CORNER\",\n      x: 126,\n      y: 72,\n      width: 150,\n      height: 38,\n    },\n    {\n      name: \"PLAYLIST_VISUALIZER_BACKGROUND\",\n      x: 205,\n      y: 0,\n      width: 75,\n      height: 38,\n    },\n    { name: \"PLAYLIST_SHADE_BACKGROUND\", x: 72, y: 57, width: 25, height: 14 },\n    {\n      name: \"PLAYLIST_SHADE_BACKGROUND_LEFT\",\n      x: 72,\n      y: 42,\n      width: 25,\n      height: 14,\n    },\n    {\n      name: \"PLAYLIST_SHADE_BACKGROUND_RIGHT\",\n      x: 99,\n      y: 57,\n      width: 50,\n      height: 14,\n    },\n    {\n      name: \"PLAYLIST_SHADE_BACKGROUND_RIGHT_SELECTED\",\n      x: 99,\n      y: 42,\n      width: 50,\n      height: 14,\n    },\n    {\n      name: \"PLAYLIST_SCROLL_HANDLE_SELECTED\",\n      x: 61,\n      y: 53,\n      width: 8,\n      height: 18,\n    },\n    { name: \"PLAYLIST_SCROLL_HANDLE\", x: 52, y: 53, width: 8, height: 18 },\n    { name: \"PLAYLIST_ADD_URL\", x: 0, y: 111, width: 22, height: 18 },\n    { name: \"PLAYLIST_ADD_URL_SELECTED\", x: 23, y: 111, width: 22, height: 18 },\n    { name: \"PLAYLIST_ADD_DIR\", x: 0, y: 130, width: 22, height: 18 },\n    { name: \"PLAYLIST_ADD_DIR_SELECTED\", x: 23, y: 130, width: 22, height: 18 },\n    { name: \"PLAYLIST_ADD_FILE\", x: 0, y: 149, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_ADD_FILE_SELECTED\",\n      x: 23,\n      y: 149,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_REMOVE_ALL\", x: 54, y: 111, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_REMOVE_ALL_SELECTED\",\n      x: 77,\n      y: 111,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_CROP\", x: 54, y: 130, width: 22, height: 18 },\n    { name: \"PLAYLIST_CROP_SELECTED\", x: 77, y: 130, width: 22, height: 18 },\n    { name: \"PLAYLIST_REMOVE_SELECTED\", x: 54, y: 149, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_REMOVE_SELECTED_SELECTED\",\n      x: 77,\n      y: 149,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_REMOVE_MISC\", x: 54, y: 168, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_REMOVE_MISC_SELECTED\",\n      x: 77,\n      y: 168,\n      width: 22,\n      height: 18,\n    },\n    {\n      name: \"PLAYLIST_INVERT_SELECTION\",\n      x: 104,\n      y: 111,\n      width: 22,\n      height: 18,\n    },\n    {\n      name: \"PLAYLIST_INVERT_SELECTION_SELECTED\",\n      x: 127,\n      y: 111,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_SELECT_ZERO\", x: 104, y: 130, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_SELECT_ZERO_SELECTED\",\n      x: 127,\n      y: 130,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_SELECT_ALL\", x: 104, y: 149, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_SELECT_ALL_SELECTED\",\n      x: 127,\n      y: 149,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_SORT_LIST\", x: 154, y: 111, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_SORT_LIST_SELECTED\",\n      x: 177,\n      y: 111,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_FILE_INFO\", x: 154, y: 130, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_FILE_INFO_SELECTED\",\n      x: 177,\n      y: 130,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_MISC_OPTIONS\", x: 154, y: 149, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_MISC_OPTIONS_SELECTED\",\n      x: 177,\n      y: 149,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_NEW_LIST\", x: 204, y: 111, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_NEW_LIST_SELECTED\",\n      x: 227,\n      y: 111,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_SAVE_LIST\", x: 204, y: 130, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_SAVE_LIST_SELECTED\",\n      x: 227,\n      y: 130,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_LOAD_LIST\", x: 204, y: 149, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_LOAD_LIST_SELECTED\",\n      x: 227,\n      y: 149,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_ADD_MENU_BAR\", x: 48, y: 111, width: 3, height: 54 },\n    { name: \"PLAYLIST_REMOVE_MENU_BAR\", x: 100, y: 111, width: 3, height: 72 },\n    { name: \"PLAYLIST_SELECT_MENU_BAR\", x: 150, y: 111, width: 3, height: 54 },\n    { name: \"PLAYLIST_MISC_MENU_BAR\", x: 200, y: 111, width: 3, height: 54 },\n    { name: \"PLAYLIST_LIST_BAR\", x: 250, y: 111, width: 3, height: 54 },\n    { name: \"PLAYLIST_CLOSE_SELECTED\", x: 52, y: 42, width: 9, height: 9 },\n    { name: \"PLAYLIST_COLLAPSE_SELECTED\", x: 62, y: 42, width: 9, height: 9 },\n    { name: \"PLAYLIST_EXPAND_SELECTED\", x: 150, y: 42, width: 9, height: 9 },\n  ],\n  EQ_EX: [\n    {\n      name: \"EQ_SHADE_BACKGROUND_SELECTED\",\n      x: 0,\n      y: 0,\n      width: 275,\n      height: 14,\n    },\n    { name: \"EQ_SHADE_BACKGROUND\", x: 0, y: 15, width: 275, height: 14 },\n    { name: \"EQ_SHADE_VOLUME_SLIDER_LEFT\", x: 1, y: 30, width: 3, height: 7 },\n    { name: \"EQ_SHADE_VOLUME_SLIDER_CENTER\", x: 4, y: 30, width: 3, height: 7 },\n    { name: \"EQ_SHADE_VOLUME_SLIDER_RIGHT\", x: 7, y: 30, width: 3, height: 7 },\n    { name: \"EQ_SHADE_BALANCE_SLIDER_LEFT\", x: 11, y: 30, width: 3, height: 7 },\n    {\n      name: \"EQ_SHADE_BALANCE_SLIDER_CENTER\",\n      x: 14,\n      y: 30,\n      width: 3,\n      height: 7,\n    },\n    {\n      name: \"EQ_SHADE_BALANCE_SLIDER_RIGHT\",\n      x: 17,\n      y: 30,\n      width: 3,\n      height: 7,\n    },\n    { name: \"EQ_MAXIMIZE_BUTTON_ACTIVE\", x: 1, y: 38, width: 9, height: 9 },\n    { name: \"EQ_MINIMIZE_BUTTON_ACTIVE\", x: 1, y: 47, width: 9, height: 9 },\n    { name: \"EQ_SHADE_CLOSE_BUTTON\", x: 11, y: 38, width: 9, height: 9 },\n    { name: \"EQ_SHADE_CLOSE_BUTTON_ACTIVE\", x: 11, y: 47, width: 9, height: 9 },\n  ],\n  EQMAIN: [\n    { name: \"EQ_WINDOW_BACKGROUND\", x: 0, y: 0, width: 275, height: 116 },\n    { name: \"EQ_TITLE_BAR\", x: 0, y: 149, width: 275, height: 14 },\n    { name: \"EQ_TITLE_BAR_SELECTED\", x: 0, y: 134, width: 275, height: 14 },\n    { name: \"EQ_SLIDER_BACKGROUND\", x: 13, y: 164, width: 209, height: 129 },\n    { name: \"EQ_SLIDER_THUMB\", x: 0, y: 164, width: 11, height: 11 },\n    { name: \"EQ_SLIDER_THUMB_SELECTED\", x: 0, y: 176, width: 11, height: 11 },\n    { name: \"EQ_CLOSE_BUTTON\", x: 0, y: 116, width: 9, height: 9 },\n    { name: \"EQ_CLOSE_BUTTON_ACTIVE\", x: 0, y: 125, width: 9, height: 9 },\n    // This is technically not a sprite, it's just part of the background.\n    // However, we extract it to use it as a fallback for\n    // `EQ_MAXIMIZE_BUTTON_ACTIVE`. Without this, skins that don't implement\n    // `eq_ex.bmp` would show the default skin's `EQ_MAXIMIZE_BUTTON_ACTIVE`\n    // instead of showing no sprite aka, just showing through to this portion of\n    // the title bar image.\n    {\n      name: \"EQ_MAXIMIZE_BUTTON_ACTIVE_FALLBACK\",\n      x: 254,\n      y: 152,\n      width: 9,\n      height: 9,\n    },\n    { name: \"EQ_ON_BUTTON\", x: 10, y: 119, width: 26, height: 12 },\n    { name: \"EQ_ON_BUTTON_DEPRESSED\", x: 128, y: 119, width: 26, height: 12 },\n    { name: \"EQ_ON_BUTTON_SELECTED\", x: 69, y: 119, width: 26, height: 12 },\n    {\n      name: \"EQ_ON_BUTTON_SELECTED_DEPRESSED\",\n      x: 187,\n      y: 119,\n      width: 26,\n      height: 12,\n    },\n    { name: \"EQ_AUTO_BUTTON\", x: 36, y: 119, width: 32, height: 12 },\n    {\n      name: \"EQ_AUTO_BUTTON_DEPRESSED\",\n      x: 154,\n      y: 119,\n      width: 32,\n      height: 12,\n    },\n    { name: \"EQ_AUTO_BUTTON_SELECTED\", x: 95, y: 119, width: 32, height: 12 },\n    {\n      name: \"EQ_AUTO_BUTTON_SELECTED_DEPRESSED\",\n      x: 213,\n      y: 119,\n      width: 32,\n      height: 12,\n    },\n    { name: \"EQ_GRAPH_BACKGROUND\", x: 0, y: 294, width: 113, height: 19 },\n    { name: \"EQ_GRAPH_LINE_COLORS\", x: 115, y: 294, width: 1, height: 19 },\n    { name: \"EQ_PRESETS_BUTTON\", x: 224, y: 164, width: 44, height: 12 },\n    {\n      name: \"EQ_PRESETS_BUTTON_SELECTED\",\n      x: 224,\n      y: 176,\n      width: 44,\n      height: 12,\n    },\n    { name: \"EQ_PREAMP_LINE\", x: 0, y: 314, width: 113, height: 1 },\n  ],\n  POSBAR: [\n    {\n      name: \"MAIN_POSITION_SLIDER_BACKGROUND\",\n      x: 0,\n      y: 0,\n      width: 248,\n      height: 10,\n    },\n    {\n      name: \"MAIN_POSITION_SLIDER_THUMB\",\n      x: 248,\n      y: 0,\n      width: 29,\n      height: 10,\n    },\n    {\n      name: \"MAIN_POSITION_SLIDER_THUMB_SELECTED\",\n      x: 278,\n      y: 0,\n      width: 29,\n      height: 10,\n    },\n  ],\n  SHUFREP: [\n    { name: \"MAIN_SHUFFLE_BUTTON\", x: 28, y: 0, width: 47, height: 15 },\n    {\n      name: \"MAIN_SHUFFLE_BUTTON_DEPRESSED\",\n      x: 28,\n      y: 15,\n      width: 47,\n      height: 15,\n    },\n    {\n      name: \"MAIN_SHUFFLE_BUTTON_SELECTED\",\n      x: 28,\n      y: 30,\n      width: 47,\n      height: 15,\n    },\n    {\n      name: \"MAIN_SHUFFLE_BUTTON_SELECTED_DEPRESSED\",\n      x: 28,\n      y: 45,\n      width: 47,\n      height: 15,\n    },\n    { name: \"MAIN_REPEAT_BUTTON\", x: 0, y: 0, width: 28, height: 15 },\n    {\n      name: \"MAIN_REPEAT_BUTTON_DEPRESSED\",\n      x: 0,\n      y: 15,\n      width: 28,\n      height: 15,\n    },\n    {\n      name: \"MAIN_REPEAT_BUTTON_SELECTED\",\n      x: 0,\n      y: 30,\n      width: 28,\n      height: 15,\n    },\n    {\n      name: \"MAIN_REPEAT_BUTTON_SELECTED_DEPRESSED\",\n      x: 0,\n      y: 45,\n      width: 28,\n      height: 15,\n    },\n    { name: \"MAIN_EQ_BUTTON\", x: 0, y: 61, width: 23, height: 12 },\n    { name: \"MAIN_EQ_BUTTON_SELECTED\", x: 0, y: 73, width: 23, height: 12 },\n    { name: \"MAIN_EQ_BUTTON_DEPRESSED\", x: 46, y: 61, width: 23, height: 12 },\n    {\n      name: \"MAIN_EQ_BUTTON_DEPRESSED_SELECTED\",\n      x: 46,\n      y: 73,\n      width: 23,\n      height: 12,\n    },\n    { name: \"MAIN_PLAYLIST_BUTTON\", x: 23, y: 61, width: 23, height: 12 },\n    {\n      name: \"MAIN_PLAYLIST_BUTTON_SELECTED\",\n      x: 23,\n      y: 73,\n      width: 23,\n      height: 12,\n    },\n    {\n      name: \"MAIN_PLAYLIST_BUTTON_DEPRESSED\",\n      x: 69,\n      y: 61,\n      width: 23,\n      height: 12,\n    },\n    {\n      name: \"MAIN_PLAYLIST_BUTTON_DEPRESSED_SELECTED\",\n      x: 69,\n      y: 73,\n      width: 23,\n      height: 12,\n    },\n  ],\n  TEXT: characterSprites,\n  TITLEBAR: [\n    { name: \"MAIN_TITLE_BAR\", x: 27, y: 15, width: 275, height: 14 },\n    { name: \"MAIN_TITLE_BAR_SELECTED\", x: 27, y: 0, width: 275, height: 14 },\n    {\n      name: \"MAIN_EASTER_EGG_TITLE_BAR\",\n      x: 27,\n      y: 72,\n      width: 275,\n      height: 14,\n    },\n    {\n      name: \"MAIN_EASTER_EGG_TITLE_BAR_SELECTED\",\n      x: 27,\n      y: 57,\n      width: 275,\n      height: 14,\n    },\n    { name: \"MAIN_OPTIONS_BUTTON\", x: 0, y: 0, width: 9, height: 9 },\n    {\n      name: \"MAIN_OPTIONS_BUTTON_DEPRESSED\",\n      x: 0,\n      y: 9,\n      width: 9,\n      height: 9,\n    },\n    { name: \"MAIN_MINIMIZE_BUTTON\", x: 9, y: 0, width: 9, height: 9 },\n    {\n      name: \"MAIN_MINIMIZE_BUTTON_DEPRESSED\",\n      x: 9,\n      y: 9,\n      width: 9,\n      height: 9,\n    },\n    { name: \"MAIN_SHADE_BUTTON\", x: 0, y: 18, width: 9, height: 9 },\n    { name: \"MAIN_SHADE_BUTTON_DEPRESSED\", x: 9, y: 18, width: 9, height: 9 },\n    { name: \"MAIN_CLOSE_BUTTON\", x: 18, y: 0, width: 9, height: 9 },\n    { name: \"MAIN_CLOSE_BUTTON_DEPRESSED\", x: 18, y: 9, width: 9, height: 9 },\n    {\n      name: \"MAIN_CLUTTER_BAR_BACKGROUND\",\n      x: 304,\n      y: 0,\n      width: 8,\n      height: 43,\n    },\n    {\n      name: \"MAIN_CLUTTER_BAR_BACKGROUND_DISABLED\",\n      x: 312,\n      y: 0,\n      width: 8,\n      height: 43,\n    },\n    {\n      name: \"MAIN_CLUTTER_BAR_BUTTON_O_SELECTED\",\n      x: 304,\n      y: 47,\n      width: 8,\n      height: 8,\n    },\n    {\n      name: \"MAIN_CLUTTER_BAR_BUTTON_A_SELECTED\",\n      x: 312,\n      y: 55,\n      width: 8,\n      height: 7,\n    },\n    {\n      name: \"MAIN_CLUTTER_BAR_BUTTON_I_SELECTED\",\n      x: 320,\n      y: 62,\n      width: 8,\n      height: 7,\n    },\n    {\n      name: \"MAIN_CLUTTER_BAR_BUTTON_D_SELECTED\",\n      x: 328,\n      y: 69,\n      width: 8,\n      height: 8,\n    },\n    {\n      name: \"MAIN_CLUTTER_BAR_BUTTON_V_SELECTED\",\n      x: 336,\n      y: 77,\n      width: 8,\n      height: 7,\n    },\n    { name: \"MAIN_SHADE_BACKGROUND\", x: 27, y: 42, width: 275, height: 14 },\n    {\n      name: \"MAIN_SHADE_BACKGROUND_SELECTED\",\n      x: 27,\n      y: 29,\n      width: 275,\n      height: 14,\n    },\n    { name: \"MAIN_SHADE_BUTTON_SELECTED\", x: 0, y: 27, width: 9, height: 9 },\n    {\n      name: \"MAIN_SHADE_BUTTON_SELECTED_DEPRESSED\",\n      x: 9,\n      y: 27,\n      width: 9,\n      height: 9,\n    },\n    {\n      name: \"MAIN_SHADE_POSITION_BACKGROUND\",\n      x: 0,\n      y: 36,\n      width: 17,\n      height: 7,\n    },\n    { name: \"MAIN_SHADE_POSITION_THUMB\", x: 20, y: 36, width: 3, height: 7 },\n    {\n      name: \"MAIN_SHADE_POSITION_THUMB_LEFT\",\n      x: 17,\n      y: 36,\n      width: 3,\n      height: 7,\n    },\n    {\n      name: \"MAIN_SHADE_POSITION_THUMB_RIGHT\",\n      x: 23,\n      y: 36,\n      width: 3,\n      height: 7,\n    },\n  ],\n  VOLUME: [\n    { name: \"MAIN_VOLUME_BACKGROUND\", x: 0, y: 0, width: 68, height: 420 },\n    { name: \"MAIN_VOLUME_THUMB\", x: 15, y: 422, width: 14, height: 11 },\n    {\n      name: \"MAIN_VOLUME_THUMB_SELECTED\",\n      x: 0,\n      y: 422,\n      width: 14,\n      height: 11,\n    },\n  ],\n  GEN: [\n    { name: \"GEN_TOP_LEFT_SELECTED\", x: 0, y: 0, width: 25, height: 20 },\n    { name: \"GEN_TOP_LEFT_END_SELECTED\", x: 26, y: 0, width: 25, height: 20 },\n    {\n      name: \"GEN_TOP_CENTER_FILL_SELECTED\",\n      x: 52,\n      y: 0,\n      width: 25,\n      height: 20,\n    },\n    { name: \"GEN_TOP_RIGHT_END_SELECTED\", x: 78, y: 0, width: 25, height: 20 },\n    {\n      name: \"GEN_TOP_LEFT_RIGHT_FILL_SELECTED\",\n      x: 104,\n      y: 0,\n      width: 25,\n      height: 20,\n    },\n    { name: \"GEN_TOP_RIGHT_SELECTED\", x: 130, y: 0, width: 25, height: 20 },\n\n    { name: \"GEN_TOP_LEFT\", x: 0, y: 21, width: 25, height: 20 },\n    { name: \"GEN_TOP_LEFT_END\", x: 26, y: 21, width: 25, height: 20 },\n    { name: \"GEN_TOP_CENTER_FILL\", x: 52, y: 21, width: 25, height: 20 },\n    { name: \"GEN_TOP_RIGHT_END\", x: 78, y: 21, width: 25, height: 20 },\n    { name: \"GEN_TOP_LEFT_RIGHT_FILL\", x: 104, y: 21, width: 25, height: 20 },\n    { name: \"GEN_TOP_RIGHT\", x: 130, y: 21, width: 25, height: 20 },\n    { name: \"GEN_BOTTOM_LEFT\", x: 0, y: 42, width: 125, height: 14 },\n    { name: \"GEN_BOTTOM_RIGHT\", x: 0, y: 57, width: 125, height: 14 },\n    { name: \"GEN_BOTTOM_FILL\", x: 127, y: 72, width: 25, height: 14 },\n    { name: \"GEN_MIDDLE_LEFT\", x: 127, y: 42, width: 11, height: 29 },\n    { name: \"GEN_MIDDLE_LEFT_BOTTOM\", x: 158, y: 42, width: 11, height: 24 },\n    { name: \"GEN_MIDDLE_RIGHT\", x: 139, y: 42, width: 8, height: 29 },\n    { name: \"GEN_MIDDLE_RIGHT_BOTTOM\", x: 170, y: 42, width: 8, height: 24 },\n    { name: \"GEN_CLOSE_SELECTED\", x: 148, y: 42, width: 9, height: 9 },\n  ],\n  /*\n\n  We don't currently support the Media Library, so there are disabled\n  GENEX: [\n    {\n      name: \"GENEX_BUTTON_BACKGROUND_LEFT_UNPRESSED\",\n      x: 0,\n      y: 0,\n      height: 15,\n      width: 4,\n    },\n    {\n      name: \"GENEX_BUTTON_BACKGROUND_CENTER_UNPRESSED\",\n      x: 4,\n      y: 0,\n      height: 15,\n      width: 39,\n    },\n    {\n      name: \"GENEX_BUTTON_BACKGROUND_RIGHT_UNPRESSED\",\n      x: 43,\n      y: 0,\n      height: 15,\n      width: 4,\n    },\n    {\n      name: \"GENEX_BUTTON_BACKGROUND_PRESSED\",\n      x: 0,\n      y: 1,\n      height: 15,\n      width: 47,\n    },\n    { name: \"GENEX_SCROLL_UP_UNPRESSED\", x: 0, y: 31, height: 14, width: 14 },\n    {\n      name: \"GENEX_SCROLL_DOWN_UNPRESSED\",\n      x: 14,\n      y: 31,\n      height: 14,\n      width: 14,\n    },\n    { name: \"GENEX_SCROLL_UP_PRESSED\", x: 28, y: 31, height: 14, width: 14 },\n    { name: \"GENEX_SCROLL_DOWN_PRESSED\", x: 42, y: 31, height: 14, width: 14 },\n    { name: \"GENEX_SCROLL_LEFT_UNPRESSED\", x: 0, y: 45, height: 14, width: 14 },\n    {\n      name: \"GENEX_SCROLL_RIGHT_UNPRESSED\",\n      x: 14,\n      y: 45,\n      height: 14,\n      width: 14,\n    },\n    { name: \"GENEX_SCROLL_LEFT_PRESSED\", x: 28, y: 45, height: 14, width: 14 },\n    { name: \"GENEX_SCROLL_RIGHT_PRESSED\", x: 42, y: 45, height: 14, width: 14 },\n    {\n      name: \"GENEX_VERTICAL_SCROLL_HANDLE_UNPRESSED\",\n      x: 56,\n      y: 31,\n      height: 28,\n      width: 14,\n    },\n    {\n      name: \"GENEX_VERTICAL_SCROLL_HANDLE_PRESSED\",\n      x: 70,\n      y: 31,\n      height: 28,\n      width: 14,\n    },\n    {\n      name: \"GENEX_HORIZONTAL_SCROLL_HANDLE_UNPRESSED\",\n      x: 84,\n      y: 31,\n      height: 14,\n      width: 28,\n    },\n    {\n      name: \"GENEX_HORIZONTAL_SCROLL_HANDLE_PRESSED\",\n      x: 84,\n      y: 45,\n      height: 14,\n      width: 28,\n    },\n  ],\n  */\n};\n\nexport default sprites;\n","import JSZip from \"jszip\";\nimport { PlaylistStyle, SkinGenExColors, CursorImage } from \"./types\";\nimport SKIN_SPRITES, { Sprite } from \"./skinSprites\";\nimport { DEFAULT_SKIN } from \"./constants\";\nimport * as Utils from \"./utils\";\nimport * as FileUtils from \"./fileUtils\";\n\nexport const getFileExtension = (fileName: string): string | null => {\n  const matches = /\\.([a-z]{3,4})$/i.exec(fileName);\n  return matches ? matches[1].toLowerCase() : null;\n};\n\nfunction getFilenameRegex(base: string, ext: string): RegExp {\n  // Note: The four slashes: \\\\\\\\ ultimately represent a single escaped slash in\n  // the regex (\"\\\\\"), however each itself needs to be escaped so that\n  // JavaScript does not interperate it as an escape character in the string\n  // literal. Wonderful.\n  return new RegExp(`^(.*[/\\\\\\\\])?${base}.(${ext})$`, \"i\");\n}\n\nexport async function getFileFromZip(\n  zip: JSZip,\n  fileName: string,\n  ext: string,\n  mode: \"blob\" | \"text\" | \"base64\" | \"uint8array\"\n) {\n  const files = zip.file(getFilenameRegex(fileName, ext));\n  if (!files.length) {\n    return null;\n  }\n\n  // Windows file system is case insensitve, but zip files are not.\n  // This means that it's possible for a zip to contain both `main.bmp` _and_\n  // `main.BMP` but in Winamp only one will be materialized onto disk when\n  // decompressing. I suspect that in this case later files in the archive\n  // overwrite earlier ones. To mimic that behavior we use the last matching\n  // file.\n  //\n  // This works because `JSZip.file` filters the files by iterating the\n  // underlying `files` object under the hood:\n  // https://github.com/Stuk/jszip/blob/25d401e104926fef8528d670ecfe53f14e77a297/lib/object.js#L182\n  // Since JavaScript objects are iterable in the order that the keys were\n  // added this _should_ mean that by taking the last file here we will get\n  // the last file that JSZip extracted.\n  const lastFile = files[files.length - 1];\n\n  try {\n    const contents = await lastFile.async(mode);\n    return { contents, name: lastFile.name };\n  } catch (e) {\n    console.warn(\n      `Failed to extract \"${fileName}.${ext}\" from the skin archive.`\n    );\n    return null;\n  }\n}\n\nfunction fallbackGetImgFromBlob(blob: Blob): Promise<HTMLImageElement> {\n  return Utils.imgFromUrl(URL.createObjectURL(blob));\n}\n\nexport async function getImgFromBlob(\n  blob: Blob\n): Promise<ImageBitmap | HTMLImageElement | null> {\n  try {\n    // Use this faster native browser API if available.\n    // NOTE: In some browsers `window.createImageBitmap` may not exist so this will throw.\n    return await window.createImageBitmap(blob);\n  } catch (e) {\n    try {\n      return await fallbackGetImgFromBlob(blob);\n    } catch (ee) {\n      // Like Winamp we will silently fail on images that don't parse.\n      return null;\n    }\n  }\n}\n\nexport function getSpriteUrisFromImg(\n  img: HTMLImageElement | ImageBitmap,\n  sprites: Sprite[]\n): { [spriteName: string]: string } {\n  const canvas = document.createElement(\"canvas\");\n  const context = canvas.getContext(\"2d\", { willReadFrequently: true });\n  if (context == null) {\n    throw new Error(\"Failed to get canvas context\");\n  }\n  const images: { [spriteName: string]: string } = {};\n  sprites.forEach((sprite) => {\n    canvas.height = sprite.height;\n    canvas.width = sprite.width;\n\n    context.drawImage(img, -sprite.x, -sprite.y);\n    const image = canvas.toDataURL();\n    images[sprite.name] = image;\n  });\n  return images;\n}\n\nexport async function getImgFromFilename(\n  zip: JSZip,\n  fileName: string\n): Promise<HTMLImageElement | ImageBitmap | null> {\n  // Winamp only supports .bmp images, but WACUP set a precidence of supporting\n  // .png as well to reduce size. Since we care about size as well, we follow\n  // suit. Our default skin uses .png to save 14kb.\n  const file = await getFileFromZip(zip, fileName, \"(png|bmp)\", \"blob\");\n  if (!file) {\n    return null;\n  }\n\n  const mimeType = `image/${getFileExtension(file.name) || \"*\"}`;\n  // The spec for createImageBitmap() says the browser should try to sniff the\n  // mime type, but it looks like Firefox does not. So we specify it here\n  // explicitly.\n  const typedBlob = new Blob([file.contents], { type: mimeType });\n  return getImgFromBlob(typedBlob);\n}\n\nexport async function getSpriteUrisFromFilename(\n  zip: JSZip,\n  fileName: string\n): Promise<{ [spriteName: string]: string }> {\n  const img = await getImgFromFilename(zip, fileName);\n  if (img == null) {\n    return {};\n  }\n  return getSpriteUrisFromImg(img, SKIN_SPRITES[fileName]);\n}\n\n// https://docs.microsoft.com/en-us/windows/win32/xaudio2/resource-interchange-file-format--riff-\nconst RIFF_MAGIC = \"RIFF\".split(\"\").map((c) => c.charCodeAt(0));\n\nfunction arrayStartsWith(arr: Uint8Array, matcher: number[]): boolean {\n  return matcher.every((item, i) => arr[i] === item);\n}\n\nexport async function getCursorFromFilename(\n  zip: JSZip,\n  fileName: string\n): Promise<CursorImage | null> {\n  const file = await getFileFromZip(zip, fileName, \"CUR\", \"uint8array\");\n  if (file == null) {\n    return null;\n  }\n  const contents = file.contents as Uint8Array;\n  if (arrayStartsWith(contents, RIFF_MAGIC)) {\n    return { type: \"ani\", aniData: contents };\n  }\n\n  return { type: \"cur\", url: FileUtils.curUrlFromByteArray(contents) };\n}\n\nexport async function getPlaylistStyle(zip: JSZip): Promise<PlaylistStyle> {\n  const files = zip.file(getFilenameRegex(\"PLEDIT\", \"txt\"));\n  const file = files[0];\n  if (file == null) {\n    return DEFAULT_SKIN.playlistStyle;\n  }\n  const ini = await file.async(\"text\");\n  if (ini == null) {\n    return DEFAULT_SKIN.playlistStyle;\n  }\n  const data = ini && Utils.parseIni(ini).text;\n  if (!data) {\n    // Corrupt or missing PLEDIT.txt file.\n    return DEFAULT_SKIN.playlistStyle;\n  }\n\n  // Winamp seems to permit colors that contain too many characters.\n  // For compatibility with existing skins, we normalize them here.\n  [\"normal\", \"current\", \"normalbg\", \"selectedbg\", \"mbFG\", \"mbBG\"].forEach(\n    (colorKey) => {\n      let color = data[colorKey];\n      if (!color) {\n        return;\n      }\n      if (color[0] !== \"#\") {\n        color = `#${color}`;\n      }\n      data[colorKey] = color.slice(0, 7);\n    }\n  );\n\n  return { ...DEFAULT_SKIN.playlistStyle, ...data };\n}\n\nexport async function getGenExColors(\n  zip: JSZip\n): Promise<null | SkinGenExColors> {\n  const img = await getImgFromFilename(zip, \"GENEX\");\n  if (img == null) {\n    return null;\n  }\n\n  const canvas = document.createElement(\"canvas\");\n  const context = canvas.getContext(\"2d\", { willReadFrequently: true });\n  if (context == null) {\n    return null;\n  }\n  canvas.width = img.width;\n  canvas.height = img.height;\n  context.drawImage(img, 0, 0);\n\n  const getColorAt = (x: number): string =>\n    `rgb(${context\n      .getImageData(x, 0, 1, 1)\n      // Discard the alpha channel\n      .data.slice(0, 3)\n      .join(\",\")})`;\n\n  // Ideally we would just have a map from key to the x value and map over\n  // that with getColorAt, but I don't know a great way to make that type\n  // safe. So, we'll just do this for now, where we explicitly call getColorAt\n  // for each key.\n  return {\n    // (1) x=48: item background (background to edits, listviews, etc.)\n    itemBackground: getColorAt(48),\n    // (2) x=50: item foreground (text colour of edits, listviews, etc.)\n    itemForeground: getColorAt(50),\n    // (3) x=52: window background (used to set the bg color for the dialog)\n    windowBackground: getColorAt(52),\n    // (4) x=54: button text colour\n    buttonText: getColorAt(54),\n    // (5) x=56: window text colour\n    windowText: getColorAt(56),\n    // (6) x=58: colour of dividers and sunken borders\n    divider: getColorAt(58),\n    // (7) x=60: selection colour for entries inside playlists (nothing else yet)\n    playlistSelection: getColorAt(60),\n    // (8) x=62: listview header background colour\n    listHeaderBackground: getColorAt(62),\n    // (9) x=64: listview header text colour\n    listHeaderText: getColorAt(64),\n    // (10) x=66: listview header frame top and left colour\n    listHeaderFrameTopAndLeft: getColorAt(66),\n    // (11) x=68: listview header frame bottom and right colour\n    listHeaderFrameBottomAndRight: getColorAt(68),\n    // (12) x=70: listview header frame colour, when pressed\n    listHeaderFramePressed: getColorAt(70),\n    // (13) x=72: listview header dead area colour\n    listHeaderDeadArea: getColorAt(72),\n    // (14) x=74: scrollbar colour #1\n    scrollbarOne: getColorAt(74),\n    // (15) x=76: scrollbar colour #2\n    scrollbarTwo: getColorAt(76),\n    // (16) x=78: pressed scrollbar colour #1\n    pressedScrollbarOne: getColorAt(78),\n    // (17) x=80: pressed scrollbar colour #2\n    pressedScrollbarTwo: getColorAt(80),\n    // (18) x=82: scrollbar dead area colour\n    scrollbarDeadArea: getColorAt(82),\n    // (19) x=84 List view text colour highlighted\n    listTextHighlighted: getColorAt(84),\n    // (20) x=86 List view background colour highlighted\n    listTextHighlightedBackground: getColorAt(86),\n    // (21) x=88 List view text colour selected\n    listTextSelected: getColorAt(88),\n    // (22) x=90 List view background colour selected\n    listTextSelectedBackground: getColorAt(90),\n  };\n}\n","import SKIN_SPRITES from \"./skinSprites\";\nimport regionParser from \"./regionParser\";\nimport { LETTERS, DEFAULT_SKIN } from \"./constants\";\nimport { parseViscolors } from \"./utils\";\nimport * as SkinParserUtils from \"./skinParserUtils\";\n\nconst shallowMerge = (objs) =>\n  objs.reduce((prev, img) => Object.assign(prev, img), {});\n\nconst CURSORS = [\n  \"CLOSE\",\n  \"EQCLOSE\",\n  \"EQNORMAL\",\n  \"EQSLID\",\n  \"EQTITLE\",\n  \"MAINMENU\",\n  \"MMENU\",\n  \"MIN\",\n  \"NORMAL\",\n  \"PCLOSE\",\n  \"PNORMAL\",\n  \"POSBAR\",\n  \"PSIZE\",\n  \"PTBAR\",\n  \"PVSCROLL\",\n  \"PWINBUT\",\n  \"PWSNORM\",\n  \"PWSSIZE\",\n  \"SONGNAME\",\n  \"TITLEBAR\",\n  \"VOLBAL\",\n  \"WINBUT\",\n  \"WSNORMAL\",\n  \"WSPOSBAR\",\n  /*\n   * > There are usually 4 more cursors in the skins: volbar.cur, wsclose.cur,\n   * > wswinbut.cur, wsmin.cur, but they are never used, at least in the last\n   * > versions of winamp, so there's no need of including them. The cursors\n   * > shown when the mouse is over the app-buttons are the same in normal and\n   * > winshade mode, except for the main menu button. You can make animated\n   * > cursors, but you have to name them with the extension .cur (animated\n   * > cursors are usually .ani files).\n   *\n   * -- Skinners Atlas\n   *\n   * \"VOLBAR\",\n   * \"WSCLOSE\",\n   * \"WSWINBUT\",\n   * \"WSMIN\",\n   *\n   */\n];\n\nasync function genVizColors(zip) {\n  const viscolor = await SkinParserUtils.getFileFromZip(\n    zip,\n    \"VISCOLOR\",\n    \"txt\",\n    \"text\"\n  );\n  return viscolor ? parseViscolors(viscolor.contents) : DEFAULT_SKIN.colors;\n}\n\nasync function genImages(zip) {\n  const imageObjs = await Promise.all(\n    Object.keys(SKIN_SPRITES).map((fileName) =>\n      SkinParserUtils.getSpriteUrisFromFilename(zip, fileName)\n    )\n  );\n  // Merge all the objects into a single object. Tests assert that sprite keys are unique.\n  return shallowMerge(imageObjs);\n}\nasync function genCursors(zip) {\n  const cursorObjs = await Promise.all(\n    CURSORS.map(async (cursorName) => ({\n      [cursorName]: await SkinParserUtils.getCursorFromFilename(\n        zip,\n        cursorName\n      ),\n    }))\n  );\n  return shallowMerge(cursorObjs);\n}\n\nasync function genRegion(zip) {\n  const region = await SkinParserUtils.getFileFromZip(\n    zip,\n    \"REGION\",\n    \"txt\",\n    \"text\"\n  );\n  return region ? regionParser(region.contents) : {};\n}\n\nasync function genGenTextSprites(zip) {\n  const img = await SkinParserUtils.getImgFromFilename(zip, \"GEN\");\n  if (img == null) {\n    return null;\n  }\n\n  const canvas = document.createElement(\"canvas\");\n  const context = canvas.getContext(\"2d\", { willReadFrequently: true });\n  canvas.width = img.width;\n  canvas.height = img.height;\n  context.drawImage(img, 0, 0);\n\n  const getLetters = (y, prefix) => {\n    const getColorAt = (x) => context.getImageData(x, y, 1, 1).data.join(\",\");\n\n    let x = 1;\n    const backgroundColor = getColorAt(0);\n\n    const height = 7;\n    return LETTERS.map((letter) => {\n      let nextBackground = x;\n      while (\n        getColorAt(nextBackground) !== backgroundColor &&\n        nextBackground < canvas.width\n      ) {\n        nextBackground++;\n      }\n      const width = nextBackground - x;\n      const name = `${prefix}_${letter}`;\n      const sprite = { x, y, height, width, name };\n      x = nextBackground + 1;\n      return sprite;\n    });\n  };\n\n  const letterWidths = {};\n  const sprites = [\n    ...getLetters(88, \"GEN_TEXT_SELECTED\"),\n    ...getLetters(96, \"GEN_TEXT\"),\n  ];\n  sprites.forEach((sprite) => {\n    letterWidths[sprite.name] = sprite.width;\n  });\n  return [letterWidths, SkinParserUtils.getSpriteUrisFromImg(img, sprites)];\n}\n\n// A promise that, given an array buffer returns a skin style object\nasync function skinParser(zipFileBuffer, JSZip) {\n  const zip = await JSZip.loadAsync(zipFileBuffer);\n\n  const [\n    colors,\n    playlistStyle,\n    images,\n    cursors,\n    region,\n    genTextSprites,\n    genExColors,\n  ] = await Promise.all([\n    genVizColors(zip),\n    SkinParserUtils.getPlaylistStyle(zip),\n    genImages(zip),\n    genCursors(zip),\n    genRegion(zip),\n    genGenTextSprites(zip),\n    SkinParserUtils.getGenExColors(zip),\n  ]);\n\n  const [genLetterWidths, genTextImages] = genTextSprites || [null, {}];\n\n  return {\n    colors,\n    playlistStyle,\n    images: { ...images, ...genTextImages },\n    genLetterWidths,\n    cursors,\n    region,\n    genExColors,\n  };\n}\n\nexport default skinParser;\n","import { parseIni } from \"./utils\";\n\nexport function pointPairs(arr: string[]) {\n  const pairedValues = [];\n  for (let i = 0; i < arr.length; i += 2) {\n    pairedValues.push(`${arr[i]},${arr[i + 1]}`);\n  }\n  return pairedValues;\n}\n\ntype RegionData = { [section: string]: string[] };\n\nexport default function regionParser(regionStr: string): RegionData {\n  const iniData = parseIni(regionStr);\n  const data: RegionData = {};\n  Object.keys(iniData).forEach((section) => {\n    const { numpoints, pointlist } = iniData[section];\n    if (!numpoints || !pointlist) {\n      return;\n    }\n    const pointCounts = numpoints.split(/\\s*,\\s*/).filter((val) => val !== \"\");\n    const points = pointPairs(\n      // points can be separated by spaces, or by commas\n      pointlist.split(/\\s*[, ]\\s*/).filter((val) => val !== \"\")\n    );\n    let pointIndex = 0;\n    const polygons = pointCounts.map((numStr) => {\n      const num = Number(numStr);\n      if (num < 3) {\n        // What use is a polygon with less than three sides?\n        pointIndex += num;\n        return null;\n      }\n      const polygon = points.slice(pointIndex, pointIndex + num).join(\" \");\n      if (!polygon.length) {\n        // It's possible that the skin author specified more polygons than provided points.\n        return null;\n      }\n      pointIndex += num;\n      return polygon;\n    });\n    const validPolygons = polygons.filter(\n      (polygon) => polygon != null\n    ) as string[];\n    if (validPolygons.length) {\n      data[section] = validPolygons;\n    }\n  });\n\n  return data;\n}\n","'use strict';\n\nmodule.exports = TinyQueue;\nmodule.exports.default = TinyQueue;\n\nfunction TinyQueue(data, compare) {\n    if (!(this instanceof TinyQueue)) return new TinyQueue(data, compare);\n\n    this.data = data || [];\n    this.length = this.data.length;\n    this.compare = compare || defaultCompare;\n\n    if (this.length > 0) {\n        for (var i = (this.length >> 1) - 1; i >= 0; i--) this._down(i);\n    }\n}\n\nfunction defaultCompare(a, b) {\n    return a < b ? -1 : a > b ? 1 : 0;\n}\n\nTinyQueue.prototype = {\n\n    push: function (item) {\n        this.data.push(item);\n        this.length++;\n        this._up(this.length - 1);\n    },\n\n    pop: function () {\n        if (this.length === 0) return undefined;\n\n        var top = this.data[0];\n        this.length--;\n\n        if (this.length > 0) {\n            this.data[0] = this.data[this.length];\n            this._down(0);\n        }\n        this.data.pop();\n\n        return top;\n    },\n\n    peek: function () {\n        return this.data[0];\n    },\n\n    _up: function (pos) {\n        var data = this.data;\n        var compare = this.compare;\n        var item = data[pos];\n\n        while (pos > 0) {\n            var parent = (pos - 1) >> 1;\n            var current = data[parent];\n            if (compare(item, current) >= 0) break;\n            data[pos] = current;\n            pos = parent;\n        }\n\n        data[pos] = item;\n    },\n\n    _down: function (pos) {\n        var data = this.data;\n        var compare = this.compare;\n        var halfLength = this.length >> 1;\n        var item = data[pos];\n\n        while (pos < halfLength) {\n            var left = (pos << 1) + 1;\n            var right = left + 1;\n            var best = data[left];\n\n            if (right < this.length && compare(data[right], best) < 0) {\n                left = right;\n                best = data[right];\n            }\n            if (compare(best, item) >= 0) break;\n\n            data[pos] = best;\n            pos = left;\n        }\n\n        data[pos] = item;\n    }\n};\n","import { TRACK_HEIGHT } from \"../constants\";\nimport * as Selectors from \"../selectors\";\n\nimport { clamp, sort, findLastIndex } from \"../utils\";\nimport { Thunk, Action } from \"../types\";\n\nexport function cropPlaylist(): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    if (Selectors.getSelectedTrackObjects(state).length === 0) {\n      return;\n    }\n    const selectedTrackIds = Selectors.getSelectedTrackIds(state);\n    const {\n      playlist: { trackOrder },\n    } = state;\n    dispatch({\n      type: \"REMOVE_TRACKS\",\n      // @ts-ignore The keys are numbers, but TypeScript does not trust us.\n      // https://github.com/Microsoft/TypeScript/pull/12253#issuecomment-263132208\n      ids: trackOrder.filter((id) => !selectedTrackIds.has(id)),\n    });\n  };\n}\n\nexport function removeSelectedTracks(): Thunk {\n  return (dispatch, getState) => {\n    dispatch({\n      type: \"REMOVE_TRACKS\",\n      // @ts-ignore The keys are numbers, but TypeScript does not trust us.\n      // https://github.com/Microsoft/TypeScript/pull/12253#issuecomment-263132208\n      ids: Array.from(Selectors.getSelectedTrackIds(getState())),\n    });\n  };\n}\n\nexport function removeAllTracks(): Thunk {\n  return (dispatch) => {\n    // It's a bit funky that we need to do both of these.\n    dispatch({ type: \"STOP\" });\n    dispatch({ type: \"REMOVE_ALL_TRACKS\" });\n  };\n}\n\nexport function reverseList(): Action {\n  return { type: \"REVERSE_LIST\" };\n}\n\nexport function randomizeList(): Action {\n  return { type: \"RANDOMIZE_LIST\" };\n}\n\nexport function sortListByTitle(): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const tracks = Selectors.getTracks(state);\n    const trackOrder = sort(Selectors.getTrackOrder(state), (i) =>\n      `${tracks[i].title}`.toLowerCase()\n    );\n    return dispatch({ type: \"SET_TRACK_ORDER\", trackOrder });\n  };\n}\n\nexport function setPlaylistScrollPosition(position: number): Action {\n  return { type: \"SET_PLAYLIST_SCROLL_POSITION\", position };\n}\n\nexport function scrollNTracks(n: number): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const overflow = Selectors.getOverflowTrackCount(state);\n    const currentOffset = Selectors.getScrollOffset(state);\n    const position = overflow ? clamp((currentOffset + n) / overflow, 0, 1) : 0;\n    return dispatch({\n      type: \"SET_PLAYLIST_SCROLL_POSITION\",\n      position: position * 100,\n    });\n  };\n}\n\nexport function scrollPlaylistByDelta(e: WheelEvent): Thunk {\n  e.preventDefault();\n  return (dispatch, getState) => {\n    const state = getState();\n    if (Selectors.getOverflowTrackCount(state)) {\n      e.stopPropagation();\n    }\n    const totalPixelHeight = state.playlist.trackOrder.length * TRACK_HEIGHT;\n    const percentDelta = (e.deltaY / totalPixelHeight) * 100;\n    dispatch({\n      type: \"SET_PLAYLIST_SCROLL_POSITION\",\n      position: clamp(\n        state.display.playlistScrollPosition + percentDelta,\n        0,\n        100\n      ),\n    });\n  };\n}\n\nexport function scrollUpFourTracks(): Thunk {\n  return scrollNTracks(-4);\n}\n\nexport function scrollDownFourTracks(): Thunk {\n  return scrollNTracks(4);\n}\n\nexport function dragSelected(offset: number): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const tracks = Selectors.getTracks(state);\n    const trackOrder = Selectors.getTrackOrder(state);\n    const selectedIds = Selectors.getSelectedTrackIdsSet(state);\n    const firstSelected = trackOrder.findIndex(\n      (trackId) => tracks[trackId] && selectedIds.has(trackId)\n    );\n    if (firstSelected === -1) {\n      return;\n    }\n    const lastSelected = findLastIndex(\n      trackOrder,\n      (trackId) => tracks[trackId] && selectedIds.has(trackId)\n    );\n    if (lastSelected === -1) {\n      throw new Error(\"We found a first selected, but not a last selected.\");\n    }\n    // Ensure we don't try to drag off either end.\n    const min = -firstSelected;\n    const max = trackOrder.length - 1 - lastSelected;\n    const normalizedOffset = clamp(offset, min, max);\n    if (normalizedOffset !== 0) {\n      dispatch({ type: \"DRAG_SELECTED\", offset: normalizedOffset });\n    }\n  };\n}\n\nexport function invertSelection(): Action {\n  return { type: \"INVERT_SELECTION\" };\n}\nexport function selectZero(): Action {\n  return { type: \"SELECT_ZERO\" };\n}\n\nexport function selectAll(): Action {\n  return { type: \"SELECT_ALL\" };\n}\n","import { BANDS } from \"../constants\";\nimport { Band, Thunk, Action } from \"../types\";\n\nconst BAND_SNAP_DISTANCE = 5;\nconst BAND_MID_POINT_VALUE = 50;\n\nfunction _snapBandValue(value: number): number {\n  if (\n    value < BAND_MID_POINT_VALUE + BAND_SNAP_DISTANCE &&\n    value > BAND_MID_POINT_VALUE - BAND_SNAP_DISTANCE\n  ) {\n    return BAND_MID_POINT_VALUE;\n  }\n  return value;\n}\n\nexport function setEqBand(band: Band, value: number): Action {\n  return { type: \"SET_BAND_VALUE\", band, value: _snapBandValue(value) };\n}\n\nfunction _setEqTo(value: number): Thunk {\n  return (dispatch) => {\n    Object.values(BANDS).forEach((band) => {\n      dispatch({\n        type: \"SET_BAND_VALUE\",\n        value,\n        band: band,\n      });\n    });\n  };\n}\n\nexport function setEqToMax(): Thunk {\n  return _setEqTo(100);\n}\n\nexport function setEqToMid(): Thunk {\n  return _setEqTo(50);\n}\n\nexport function setEqToMin(): Thunk {\n  return _setEqTo(0);\n}\n\nexport function setPreamp(value: number): Action {\n  return {\n    type: \"SET_BAND_VALUE\",\n    band: \"preamp\",\n    value: _snapBandValue(value),\n  };\n}\n\nexport function toggleEq(): Thunk {\n  return (dispatch, getState) => {\n    if (getState().equalizer.on) {\n      dispatch({ type: \"SET_EQ_OFF\" });\n    } else {\n      dispatch({ type: \"SET_EQ_ON\" });\n    }\n  };\n}\n\nexport function toggleEqAuto(): Thunk {\n  return (dispatch) => {\n    // We don't actually support this feature yet so don't let the user ever turn it on.\n    // dispatch({ type: SET_EQ_AUTO, value: !getState().equalizer.auto });\n    dispatch({ type: \"SET_EQ_AUTO\", value: false });\n  };\n}\n","import { parser, creator } from \"winamp-eqf\";\nimport { BANDS, LOAD_STYLE } from \"../constants\";\n\nimport * as Utils from \"../utils\";\n\nimport {\n  promptForFileReferences,\n  genArrayBufferFromFileReference,\n  genMediaDuration,\n  genMediaTags,\n} from \"../fileUtils\";\nimport skinParser from \"../skinParser\";\nimport {\n  getTracks,\n  getUserTracks,\n  getTrackIsVisibleFunction,\n  getEqfData,\n  getPlaylistURL,\n} from \"../selectors\";\n\nimport LoadQueue from \"../loadQueue\";\n\nimport { removeAllTracks } from \"./playlist\";\nimport { setPreamp, setEqBand } from \"./equalizer\";\nimport {\n  LoadStyle,\n  Thunk,\n  Track,\n  EqfPreset,\n  SkinData,\n  WindowId,\n} from \"../types\";\n\n// Lower is better\nconst DURATION_VISIBLE_PRIORITY = 5;\nconst META_DATA_VISIBLE_PRIORITY = 10;\nconst DURATION_PRIORITY = 15;\nconst META_DATA_PRIORITY = 20;\n\nconst loadQueue = new LoadQueue({ threads: 4 });\n\nexport function addTracksFromReferences(\n  fileReferences: FileList,\n  loadStyle: LoadStyle,\n  atIndex: number | undefined\n): Thunk {\n  const tracks: Track[] = Array.from(fileReferences).map((file) => ({\n    blob: file,\n    defaultName: file.name,\n  }));\n  return loadMediaFiles(tracks, loadStyle, atIndex);\n}\n\nconst SKIN_FILENAME_MATCHER = new RegExp(\"(wsz|zip)$\", \"i\");\nconst EQF_FILENAME_MATCHER = new RegExp(\"eqf$\", \"i\");\nexport function loadFilesFromReferences(\n  fileReferences: FileList,\n  loadStyle: LoadStyle = LOAD_STYLE.PLAY,\n  atIndex: number | undefined = undefined\n): Thunk {\n  return (dispatch) => {\n    if (fileReferences.length < 1) {\n      return;\n    } else if (fileReferences.length === 1) {\n      const fileReference = fileReferences[0];\n      if (SKIN_FILENAME_MATCHER.test(fileReference.name)) {\n        dispatch(setSkinFromBlob(fileReference));\n        return;\n      } else if (EQF_FILENAME_MATCHER.test(fileReference.name)) {\n        dispatch(setEqFromFileReference(fileReference));\n        return;\n      }\n    }\n    dispatch(addTracksFromReferences(fileReferences, loadStyle, atIndex));\n  };\n}\n\nexport function setSkinFromBlob(blob: Blob | Promise<Blob>): Thunk {\n  return async (dispatch, getState, { requireJSZip }) => {\n    if (!requireJSZip) {\n      alert(\"Webamp has not been configured to support custom skins.\");\n      return;\n    }\n    dispatch({ type: \"LOADING\" });\n    let JSZip;\n    try {\n      JSZip = await requireJSZip();\n    } catch (e) {\n      console.error(e);\n      dispatch({ type: \"LOADED\" });\n      alert(\"Failed to load the skin parser.\");\n      return;\n    }\n    try {\n      const skinData = await skinParser(blob, JSZip);\n      dispatch({\n        type: \"SET_SKIN_DATA\",\n        data: {\n          skinImages: skinData.images,\n          skinColors: skinData.colors,\n          skinPlaylistStyle: skinData.playlistStyle,\n          skinCursors: skinData.cursors,\n          skinRegion: skinData.region,\n          skinGenLetterWidths: skinData.genLetterWidths,\n          skinGenExColors: skinData.genExColors,\n        } as SkinData,\n      });\n    } catch (e) {\n      console.error(e);\n      dispatch({ type: \"LOADED\" });\n      alert(`Failed to parse skin`);\n    }\n  };\n}\n\nexport function setSkinFromUrl(url: string): Thunk {\n  return async (dispatch) => {\n    dispatch({ type: \"LOADING\" });\n    try {\n      const response = await fetch(url);\n      if (!response.ok) {\n        throw new Error(response.statusText);\n      }\n      dispatch(setSkinFromBlob(response.blob()));\n    } catch (e) {\n      console.error(e);\n      dispatch({ type: \"LOADED\" });\n      alert(`Failed to download skin from ${url}`);\n    }\n  };\n}\n\n// This function is private, since Winamp consumers can provide means for\n// opening files via other methods. Only use the file type specific\n// versions below, since they can defer to the user-defined behavior.\nfunction _openFileDialog(\n  accept: string | null,\n  expectedType: \"SKIN\" | \"MEDIA\" | \"EQ\"\n): Thunk {\n  return async (dispatch) => {\n    const fileReferences = await promptForFileReferences({ accept });\n    dispatch({\n      type: \"OPENED_FILES\",\n      expectedType,\n      count: fileReferences.length,\n      firstFileName: fileReferences[0]?.name,\n    });\n    dispatch(loadFilesFromReferences(fileReferences));\n  };\n}\n\nexport function openEqfFileDialog(): Thunk {\n  return _openFileDialog(\".eqf\", \"EQ\");\n}\n\nexport function openMediaFileDialog(): Thunk {\n  return _openFileDialog(null, \"MEDIA\");\n}\n\nexport function openSkinFileDialog() {\n  return _openFileDialog(\".zip, .wsz\", \"SKIN\");\n}\n\nexport function fetchMediaDuration(url: string, id: number): Thunk {\n  return (dispatch, getState) => {\n    loadQueue.push(\n      async () => {\n        try {\n          const duration = await genMediaDuration(url);\n          dispatch({ type: \"SET_MEDIA_DURATION\", duration, id });\n        } catch (e) {\n          // TODO: Should we update the state to indicate that we don't know the length?\n        }\n      },\n\n      () => {\n        const trackIsVisible = getTrackIsVisibleFunction(getState());\n        return trackIsVisible(id)\n          ? DURATION_VISIBLE_PRIORITY\n          : DURATION_PRIORITY;\n      }\n    );\n  };\n}\n\nexport function loadMedia(\n  e: React.DragEvent<HTMLDivElement>,\n  loadStyle: LoadStyle = LOAD_STYLE.NONE,\n  atIndex = 0\n): Thunk {\n  const { files } = e.dataTransfer;\n  return async (dispatch, getState, { handleTrackDropEvent }) => {\n    if (handleTrackDropEvent) {\n      const tracks = await handleTrackDropEvent(e);\n\n      if (tracks != null) {\n        dispatch(loadMediaFiles(tracks, loadStyle, atIndex));\n        return;\n      }\n    }\n    dispatch(loadFilesFromReferences(files, loadStyle, atIndex));\n  };\n}\n\nexport function loadMediaFiles(\n  tracks: Track[],\n  loadStyle: LoadStyle = LOAD_STYLE.NONE,\n  atIndex = 0\n): Thunk {\n  return (dispatch) => {\n    if (loadStyle === LOAD_STYLE.PLAY) {\n      // I'm the worst. It just so happens that in every case that we autoPlay,\n      // we should also clear all tracks.\n      dispatch(removeAllTracks());\n    }\n    tracks.forEach((track, i) => {\n      const priority = i === 0 ? loadStyle : LOAD_STYLE.NONE;\n      dispatch(loadMediaFile(track, priority, atIndex + i));\n    });\n  };\n}\n\nexport function loadMediaFile(\n  track: Track,\n  priority: LoadStyle = LOAD_STYLE.NONE,\n  atIndex = 0\n): Thunk {\n  return (dispatch) => {\n    const id = Utils.uniqueId();\n    const { defaultName, metaData, duration } = track;\n    let canonicalUrl: string;\n    if (\"url\" in track) {\n      canonicalUrl = track.url.toString();\n    } else if (\"blob\" in track) {\n      canonicalUrl = URL.createObjectURL(track.blob);\n    } else {\n      throw new Error(\"Expected track to have either a blob or a url\");\n    }\n\n    dispatch({\n      type: \"ADD_TRACK_FROM_URL\",\n      url: canonicalUrl,\n      duration: track.duration,\n      defaultName,\n      id,\n      atIndex,\n    });\n    switch (priority) {\n      case LOAD_STYLE.BUFFER:\n        dispatch({ type: \"BUFFER_TRACK\", id });\n        break;\n      case LOAD_STYLE.PLAY:\n        dispatch({ type: \"PLAY_TRACK\", id });\n        break;\n      case LOAD_STYLE.NONE:\n      default:\n        // If we're not going to load this right away,\n        // we should set duration on our own\n        if (duration != null) {\n          dispatch({ type: \"SET_MEDIA_DURATION\", duration, id });\n        } else {\n          dispatch(fetchMediaDuration(canonicalUrl, id));\n        }\n    }\n\n    if (metaData != null) {\n      const { artist, title, album } = metaData;\n      dispatch({\n        type: \"SET_MEDIA_TAGS\",\n        artist,\n        title,\n        album,\n        // For now, we lie about these next three things.\n        // TODO: Ideally we would leave these as null and force a media data\n        // fetch when the user starts playing.\n        sampleRate: 44000,\n        bitrate: 192000,\n        numberOfChannels: 2,\n        id,\n      });\n    } else if (\"blob\" in track) {\n      // Blobs can be loaded quickly\n      dispatch(fetchMediaTags(track.blob, id));\n    } else {\n      dispatch(queueFetchingMediaTags(id));\n    }\n  };\n}\n\nfunction queueFetchingMediaTags(id: number): Thunk {\n  return (dispatch, getState) => {\n    const track = getTracks(getState())[id];\n    loadQueue.push(\n      () => dispatch(fetchMediaTags(track.url, id)),\n      () => {\n        const trackIsVisible = getTrackIsVisibleFunction(getState());\n        return trackIsVisible(id)\n          ? META_DATA_VISIBLE_PRIORITY\n          : META_DATA_PRIORITY;\n      }\n    );\n  };\n}\n\nexport function fetchMediaTags(file: string | Blob, id: number): Thunk {\n  return async (dispatch, getState, { requireMusicMetadata }) => {\n    dispatch({ type: \"MEDIA_TAG_REQUEST_INITIALIZED\", id });\n\n    try {\n      const metadata = await genMediaTags(file, await requireMusicMetadata());\n      // There's more data here, but we don't have a use for it yet:\n      const { artist, title, album, picture } = metadata.common;\n      const { numberOfChannels, bitrate, sampleRate } = metadata.format;\n      let albumArtUrl = null;\n      if (picture && picture.length >= 1) {\n        const byteArray = new Uint8Array(picture[0].data);\n        const blob = new Blob([byteArray], { type: picture[0].format });\n        albumArtUrl = URL.createObjectURL(blob);\n      }\n      dispatch({\n        type: \"SET_MEDIA_TAGS\",\n        artist: artist ? artist : \"\",\n        title: title ? title : \"\",\n        album,\n        albumArtUrl,\n        numberOfChannels,\n        bitrate,\n        sampleRate,\n        id,\n      });\n    } catch (e) {\n      dispatch({ type: \"MEDIA_TAG_REQUEST_FAILED\", id });\n    }\n  };\n}\n\nexport function setEqFromFileReference(fileReference: File): Thunk {\n  return async (dispatch) => {\n    const arrayBuffer = await genArrayBufferFromFileReference(fileReference);\n    const eqf = parser(arrayBuffer);\n    const preset: EqfPreset = eqf.presets[0];\n    dispatch(setEqFromObject(preset));\n  };\n}\n\nexport function setEqFromObject(preset: EqfPreset): Thunk {\n  return (dispatch) => {\n    dispatch(setPreamp(Utils.normalizeEqBand(preset.preamp)));\n    BANDS.forEach((band) => {\n      // @ts-ignore band and EqfPreset align\n      dispatch(setEqBand(band, Utils.normalizeEqBand(preset[`hz${band}`])));\n    });\n  };\n}\n\nexport function downloadPreset(): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const data = getEqfData(state);\n    const arrayBuffer = creator(data);\n    const base64 = Utils.base64FromArrayBuffer(arrayBuffer);\n    const dataURI = `data:application/zip;base64,${base64}`;\n    Utils.downloadURI(dataURI, \"entry.eqf\");\n  };\n}\n\nexport function downloadHtmlPlaylist(): Thunk {\n  return (dispatch, getState) => {\n    const uri = getPlaylistURL(getState());\n    Utils.downloadURI(uri, \"Winamp Playlist.html\");\n  };\n}\n\nlet el: HTMLInputElement | null = document.createElement(\"input\");\nel.type = \"file\";\n// @ts-ingore\nconst DIR_SUPPORT =\n  // @ts-ignore\n  typeof el.webkitdirectory !== \"undefined\" ||\n  // @ts-ignore\n  typeof el.mozdirectory !== \"undefined\" ||\n  // @ts-ignore\n  typeof el.directory !== \"undefined\";\n// Release our reference\nel = null;\n\nexport function addFilesAtIndex(nextIndex: number): Thunk {\n  return async (dispatch) => {\n    const fileReferences = await promptForFileReferences();\n    dispatch(\n      addTracksFromReferences(fileReferences, LOAD_STYLE.NONE, nextIndex)\n    );\n  };\n}\n\nexport function addDirAtIndex(nextIndex: number): Thunk {\n  return async (dispatch) => {\n    if (!DIR_SUPPORT) {\n      alert(\"Not supported in your browser\");\n      return;\n    }\n    const fileReferences = await promptForFileReferences({ directory: true });\n    dispatch(\n      addTracksFromReferences(fileReferences, LOAD_STYLE.NONE, nextIndex)\n    );\n  };\n}\n\nexport function addFilesFromUrl(atIndex = 0): Thunk {\n  return async (dispatch, getState, { handleAddUrlEvent }) => {\n    if (handleAddUrlEvent) {\n      const tracks = await handleAddUrlEvent();\n\n      if (tracks != null) {\n        dispatch(loadMediaFiles(tracks, LOAD_STYLE.NONE, atIndex));\n        return;\n      }\n    } else {\n      alert(\"Not supported in Webamp\");\n    }\n  };\n}\n\nexport function addFilesFromList(): Thunk {\n  return async (dispatch, getState, { handleLoadListEvent }) => {\n    if (handleLoadListEvent) {\n      const tracks = await handleLoadListEvent();\n\n      if (tracks != null) {\n        dispatch(removeAllTracks());\n\n        dispatch(loadMediaFiles(tracks, LOAD_STYLE.NONE, 0));\n        return;\n      }\n    } else {\n      alert(\"Not supported in Webamp\");\n    }\n  };\n}\n\nexport function saveFilesToList(): Thunk {\n  return (dispatch, getState, { handleSaveListEvent }) => {\n    if (handleSaveListEvent) {\n      handleSaveListEvent(getUserTracks(getState()));\n    } else {\n      alert(\"Not supported in Webamp\");\n    }\n  };\n}\n\nexport function droppedFiles(e: React.DragEvent, windowId: WindowId): Thunk {\n  return (dispatch) =>\n    dispatch({\n      type: \"DROPPED_FILES\",\n      count: e.dataTransfer.files.length,\n      firstFileName: e.dataTransfer.files[0]?.name,\n      windowId,\n    });\n}\n","import invariant from \"invariant\";\nimport TinyQueue from \"tinyqueue\";\n\n// Push promises onto a queue with a priority.\n// Run a given number of jobs in parallel\n// Useful for prioritizing network requests\nexport default class LoadQueue {\n  constructor({ threads }) {\n    // TODO: Consider not running items with zero priority\n    // Priority is a function so that items can change their priority between\n    // when their priority is evaluated.\n    // For example, we might add a track to the playlist and then scroll to/away\n    // from it before it gets processed.\n    this._queue = new TinyQueue([], (a, b) => a.priority() - b.priority());\n    this._availableThreads = threads;\n  }\n\n  push(task, priority) {\n    const t = { task, priority };\n    this._queue.push(t);\n    // Wait until the next event loop to pick a task to run. This way, we can\n    // enqueue multiple items in an event loop, and be sure they will be run in\n    // priority order.\n    setTimeout(() => {\n      this._run();\n    }, 0);\n    return () => {\n      // TODO: Could return a boolean representing if the task has already been\n      // kicked off.\n      this._queue = this._queue.filter((t1) => t1 !== t);\n    };\n  }\n\n  _run() {\n    while (this._availableThreads > 0) {\n      if (this._queue.length === 0) {\n        return;\n      }\n      this._availableThreads--;\n      const t = this._queue.pop();\n      const promise = t.task();\n      invariant(\n        typeof promise.then === \"function\",\n        `LoadQueue only supports loading Promises. Got ${promise}`\n      );\n      promise.then(() => {\n        this._availableThreads++;\n        this._run();\n      });\n    }\n  }\n}\n","import { HEADER, PRESET_VALUES } from \"./constants.js\";\nexport function parser(arrayBuffer) {\n    const data = {\n        type: \"\",\n        presets: [],\n    };\n    let i = 0;\n    const arr = new Int8Array(arrayBuffer);\n    // Parse header\n    data.type = String.fromCharCode.apply(null, Array.from(arr.slice(i, HEADER.length)));\n    if (data.type !== HEADER) {\n        throw new Error(\"Invalid .eqf file.\");\n    }\n    i += HEADER.length;\n    // Skip \"<ctrl-z>!--\"\n    i += 4;\n    // Get the presets\n    while (i < arr.length) {\n        const preset = {};\n        // Get the name\n        const nameStart = i;\n        const nameEnd = nameStart + 257; // Str is fixed length\n        // Str is null terminated\n        while (arr[i] !== 0 && i <= nameEnd) {\n            i++;\n        }\n        preset.name = String.fromCharCode.apply(null, Array.from(arr.slice(nameStart, i)));\n        i = nameEnd; // Skip over any unused bytes\n        // Get the levels\n        PRESET_VALUES.forEach((valueName) => {\n            preset[valueName] = 64 - arr[i++]; // Adjust for inverse values\n        });\n        data.presets.push(preset);\n    }\n    return data;\n}\n","import { HEADER, PRESET_VALUES } from \"./constants.js\";\nconst PRESET_LENGTH = 257;\nexport function creator(data) {\n    const buffer = [];\n    // Add header\n    for (let i = 0; i < HEADER.length; i++) {\n        buffer.push(HEADER.charCodeAt(i));\n    }\n    // Add control character and ending\n    buffer.push(26); // <ctrl-z>\n    const ending = \"!--\";\n    for (let i = 0; i < ending.length; i++) {\n        buffer.push(ending.charCodeAt(i));\n    }\n    if (!data.presets) {\n        throw new Error(\"Eqf data is missing presets\");\n    }\n    data.presets.forEach((preset) => {\n        // Add preset name\n        let k = 0;\n        for (; k < preset.name.length; k++) {\n            buffer.push(preset.name.charCodeAt(k));\n        }\n        // Pad name to fixed length\n        for (; k < PRESET_LENGTH; k++) {\n            buffer.push(0);\n        }\n        // Add preset values\n        PRESET_VALUES.forEach((valueName) => {\n            buffer.push(64 - preset[valueName]); // Adjust for inverse values\n        });\n    });\n    return new Uint8Array(buffer).buffer;\n}\n","import { clamp } from \"../utils\";\n\nimport { MEDIA_STATUS } from \"../constants\";\nimport { openMediaFileDialog } from \"./files\";\nimport { GetState, Dispatch, Thunk, Action } from \"../types\";\nimport * as Selectors from \"../selectors\";\n\nexport function playTrack(id: number): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const isStopped = Selectors.getMediaStatus(state) === MEDIA_STATUS.STOPPED;\n    if (isStopped) {\n      dispatch({ type: \"BUFFER_TRACK\", id });\n    } else {\n      dispatch({ type: \"PLAY_TRACK\", id });\n    }\n  };\n}\n\nexport function playTrackNow(id: number): Action {\n  return { type: \"PLAY_TRACK\", id };\n}\n\nexport function play(): Thunk {\n  return (dispatch: Dispatch, getState: GetState) => {\n    const state = getState();\n    if (\n      state.media.status === MEDIA_STATUS.STOPPED &&\n      state.playlist.currentTrack == null &&\n      state.playlist.trackOrder.length === 0\n    ) {\n      dispatch(openMediaFileDialog());\n    } else {\n      dispatch({ type: \"PLAY\" });\n    }\n  };\n}\n\nexport function pause(): Thunk {\n  return (dispatch, getState) => {\n    const { status } = getState().media;\n    if (status === MEDIA_STATUS.PLAYING) {\n      dispatch({ type: \"PAUSE\" });\n    } else {\n      dispatch({ type: \"PLAY\" });\n    }\n  };\n}\n\nexport function stop(): Action {\n  return { type: \"STOP\" };\n}\n\nexport function nextN(n: number): Thunk {\n  return (dispatch, getState) => {\n    const nextTrackId = Selectors.getNextTrackId(getState(), n);\n    if (nextTrackId == null) {\n      dispatch({ type: \"IS_STOPPED\" });\n      return;\n    }\n    dispatch(playTrack(nextTrackId));\n  };\n}\n\nexport function next(): Thunk {\n  return nextN(1);\n}\n\nexport function previous(): Thunk {\n  return nextN(-1);\n}\n\nexport function seekToTime(seconds: number): Thunk {\n  return function (dispatch, getState) {\n    const state = getState();\n    const duration = Selectors.getDuration(state);\n    if (duration == null) {\n      return;\n    }\n    dispatch({\n      type: \"SEEK_TO_PERCENT_COMPLETE\",\n      percent: (seconds / duration) * 100,\n    });\n  };\n}\nexport function seekForward(seconds: number): Thunk {\n  return function (dispatch, getState) {\n    const timeElapsed = Selectors.getTimeElapsed(getState());\n    dispatch(seekToTime(timeElapsed + seconds));\n  };\n}\n\nexport function seekBackward(seconds: number): Thunk {\n  return seekForward(-seconds);\n}\n\nexport function setVolume(volume: number): Action {\n  return {\n    type: \"SET_VOLUME\",\n    volume: clamp(volume, 0, 100),\n  };\n}\n\nexport function adjustVolume(volumeDiff: number): Thunk {\n  return (dispatch, getState) => {\n    const currentVolume = getState().media.volume;\n    return dispatch(setVolume(currentVolume + volumeDiff));\n  };\n}\n\nexport function scrollVolume(e: WheelEvent): Thunk {\n  e.preventDefault();\n  return (dispatch, getState) => {\n    const currentVolume = getState().media.volume;\n    // Using pixels as percentage difference here is a bit arbitrary, but... oh well.\n    return dispatch(setVolume(currentVolume + e.deltaY));\n  };\n}\n\nexport function setBalance(balance: number): Action {\n  balance = clamp(balance, -100, 100);\n  // The balance clips to the center\n  if (Math.abs(balance) < 25) {\n    balance = 0;\n  }\n  return {\n    type: \"SET_BALANCE\",\n    balance,\n  };\n}\n\nexport function toggleRepeat(): Action {\n  return { type: \"TOGGLE_REPEAT\" };\n}\n\nexport function toggleShuffle(): Action {\n  return { type: \"TOGGLE_SHUFFLE\" };\n}\n\nexport function toggleTimeMode(): Action {\n  return { type: \"TOGGLE_TIME_MODE\" };\n}\n","import * as Selectors from \"../selectors\";\nimport {\n  TransitionType,\n  Preset,\n  ButterchurnOptions,\n  StatePreset,\n  Thunk,\n  Action,\n} from \"../types\";\nimport * as FileUtils from \"../fileUtils\";\n\nfunction normalizePresetTypes(preset: Preset): StatePreset {\n  const { name } = preset;\n  if (\"butterchurnPresetObject\" in preset) {\n    return {\n      type: \"RESOLVED\",\n      name,\n      preset: preset.butterchurnPresetObject,\n    };\n  } else if (\"getButterchrunPresetObject\" in preset) {\n    return {\n      type: \"UNRESOLVED\",\n      name,\n      getPreset: preset.getButterchrunPresetObject,\n    };\n  } else if (\"butterchurnPresetUrl\" in preset) {\n    return {\n      type: \"UNRESOLVED\",\n      name,\n      getPreset: async () => {\n        const resp = await fetch(preset.butterchurnPresetUrl);\n        return resp.json();\n      },\n    };\n  }\n  throw new Error(\"Invalid preset object\");\n}\n\nexport function initializePresets(presetOptions: ButterchurnOptions): Thunk {\n  return async (dispatch) => {\n    const { getPresets, importButterchurn } = presetOptions;\n    importButterchurn().then((butterchurnModule) => {\n      const butterchurn = butterchurnModule.default ?? butterchurnModule;\n      dispatch({ type: \"GOT_BUTTERCHURN\", butterchurn });\n    });\n\n    const presets = await getPresets();\n    const normalizePresets = presets.map(normalizePresetTypes);\n    dispatch(loadPresets(normalizePresets));\n  };\n}\n\nexport function loadPresets(presets: StatePreset[]): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const presetsLength = state.milkdrop.presets.length;\n    dispatch({ type: \"GOT_BUTTERCHURN_PRESETS\", presets });\n    if (presetsLength === 0 && Selectors.getRandomizePresets(state)) {\n      dispatch(selectRandomPreset());\n    } else {\n      dispatch(\n        requestPresetAtIndex(presetsLength, TransitionType.IMMEDIATE, true)\n      );\n    }\n  };\n}\n\nexport function appendPresetFileList(fileList: FileList): Thunk {\n  return async (dispatch, getState, { convertPreset }) => {\n    const presets: StatePreset[] = Array.from(fileList)\n      .map((file) => {\n        const JSON_EXT = \".json\";\n        const MILK_EXT = \".milk\";\n        const filename = file.name.toLowerCase();\n        if (filename.endsWith(MILK_EXT)) {\n          if (convertPreset == null) {\n            throw new Error(\"Invalid type\");\n          }\n          return {\n            type: \"UNRESOLVED\",\n            name: file.name.slice(0, file.name.length - MILK_EXT.length),\n            getPreset: () => convertPreset(file),\n          } as StatePreset;\n        } else if (filename.endsWith(JSON_EXT)) {\n          return {\n            type: \"UNRESOLVED\",\n            name: file.name.slice(0, file.name.length - JSON_EXT.length),\n            getPreset: async () => {\n              const str = await FileUtils.genStringFromFileReference(file);\n              // TODO: How should we handle the case where json parsing fails?\n              return JSON.parse(str);\n            },\n          } as StatePreset;\n        }\n        console.error(\"Invalid type preset when loading directory\");\n\n        return null as never;\n      })\n      .filter(Boolean);\n    dispatch(loadPresets(presets));\n  };\n}\n\nexport function selectNextPreset(\n  transitionType: TransitionType = TransitionType.DEFAULT\n): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    if (Selectors.getRandomizePresets(state)) {\n      return dispatch(selectRandomPreset(transitionType));\n    }\n    const currentPresetIndex = Selectors.getCurrentPresetIndex(state);\n    if (currentPresetIndex == null) {\n      return;\n    }\n    const nextPresetIndex = currentPresetIndex + 1;\n    dispatch(requestPresetAtIndex(nextPresetIndex, transitionType, true));\n  };\n}\n\nexport function selectPreviousPreset(\n  transitionType: TransitionType = TransitionType.DEFAULT\n): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const { presetHistory } = state.milkdrop;\n    if (presetHistory.length < 1) {\n      return;\n    }\n    // Awkward. We do -2 becuase the the last track is the current track.\n    const lastPresetIndex = presetHistory[presetHistory.length - 2];\n\n    dispatch(requestPresetAtIndex(lastPresetIndex, transitionType, false));\n  };\n}\n\nexport function selectRandomPreset(\n  transitionType: TransitionType = TransitionType.DEFAULT\n): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    // TODO: Make this a selector.\n    const randomIndex = Math.floor(\n      Math.random() * state.milkdrop.presets.length\n    );\n    dispatch(requestPresetAtIndex(randomIndex, transitionType, true));\n  };\n}\n\n// TODO: Technically there's a race here. If you request two presets in a row, the\n// first one may resolve before the second.\nexport function requestPresetAtIndex(\n  index: number,\n  transitionType: TransitionType,\n  addToHistory: boolean\n): Thunk {\n  return async (dispatch, getState) => {\n    const state = getState();\n    const preset = state.milkdrop.presets[index];\n    if (preset == null) {\n      // Index might be out of range.\n      return;\n    }\n    dispatch({ type: \"PRESET_REQUESTED\", index, addToHistory });\n    switch (preset.type) {\n      case \"RESOLVED\":\n        dispatch({ type: \"SELECT_PRESET_AT_INDEX\", index, transitionType });\n        return;\n      case \"UNRESOLVED\":\n        const json = await preset.getPreset();\n        // TODO: Ensure that this works correctly even if requests resolve out of order\n        dispatch({ type: \"RESOLVE_PRESET_AT_INDEX\", index, json });\n        dispatch({ type: \"SELECT_PRESET_AT_INDEX\", index, transitionType });\n        return;\n    }\n  };\n}\n\nexport function handlePresetDrop(e: React.DragEvent): Thunk {\n  return appendPresetFileList(e.dataTransfer.files);\n}\n\nexport function toggleRandomizePresets(): Action {\n  return { type: \"TOGGLE_RANDOMIZE_PRESETS\" };\n}\n\nexport function togglePresetCycling(): Action {\n  return { type: \"TOGGLE_PRESET_CYCLING\" };\n}\n\nexport function scheduleMilkdropMessage(message: string): Action {\n  return { type: \"SCHEDULE_MILKDROP_MESSAGE\", message };\n}\n","import { WINDOWS } from \"../constants\";\nimport { Thunk, Action, Slider } from \"../types\";\nimport { SerializedStateV1 } from \"../serializedStates/v1Types\";\nimport * as Selectors from \"../selectors\";\nimport { ensureWindowsAreOnScreen, setFocusedWindow } from \"./windows\";\n\nexport {\n  toggleDoubleSizeMode,\n  toggleEqualizerShadeMode,\n  togglePlaylistShadeMode,\n  closeWindow,\n  setWindowSize,\n  toggleWindow,\n  updateWindowPositions,\n  toggleMainWindowShadeMode,\n  centerWindowsInContainer,\n  centerWindowsInView,\n  resetWindowSizes,\n  browserWindowSizeChanged,\n  ensureWindowsAreOnScreen,\n  stackWindows,\n  toggleLlamaMode,\n  setFocusedWindow,\n  setWindowLayout,\n} from \"./windows\";\nexport {\n  play,\n  pause,\n  stop,\n  nextN,\n  next,\n  previous,\n  seekToTime,\n  seekForward,\n  seekBackward,\n  setVolume,\n  playTrack,\n  playTrackNow,\n  adjustVolume,\n  scrollVolume,\n  setBalance,\n  toggleRepeat,\n  toggleShuffle,\n  toggleTimeMode,\n} from \"./media\";\nexport {\n  setEqBand,\n  setEqToMax,\n  setEqToMid,\n  setEqToMin,\n  setPreamp,\n  toggleEq,\n  toggleEqAuto,\n} from \"./equalizer\";\nexport {\n  addTracksFromReferences,\n  loadFilesFromReferences,\n  setSkinFromUrl,\n  openEqfFileDialog,\n  openMediaFileDialog,\n  openSkinFileDialog,\n  fetchMediaDuration,\n  loadMedia,\n  loadMediaFiles,\n  loadMediaFile,\n  fetchMediaTags,\n  setEqFromFileReference,\n  downloadPreset,\n  setEqFromObject,\n  downloadHtmlPlaylist,\n  addDirAtIndex,\n  addFilesAtIndex,\n  addFilesFromUrl,\n  addFilesFromList,\n  saveFilesToList,\n  droppedFiles,\n} from \"./files\";\nexport {\n  cropPlaylist,\n  removeSelectedTracks,\n  removeAllTracks,\n  reverseList,\n  randomizeList,\n  sortListByTitle,\n  setPlaylistScrollPosition,\n  scrollNTracks,\n  scrollPlaylistByDelta,\n  scrollUpFourTracks,\n  scrollDownFourTracks,\n  dragSelected,\n  selectAll,\n  selectZero,\n  invertSelection,\n} from \"./playlist\";\nexport {\n  initializePresets,\n  requestPresetAtIndex,\n  selectRandomPreset,\n  selectNextPreset,\n  selectPreviousPreset,\n  appendPresetFileList,\n  handlePresetDrop,\n  loadPresets,\n  toggleRandomizePresets,\n  togglePresetCycling,\n  scheduleMilkdropMessage,\n} from \"./milkdrop\";\n\nexport function close(): Thunk {\n  return (dispatch) => {\n    // TODO: This could probably be improved by adding a \"PREVENT_CLOSE\" action\n    // or something, but this works okay for now.\n    let defaultPrevented = false;\n    const cancel = () => {\n      defaultPrevented = true;\n    };\n    dispatch({ type: \"CLOSE_REQUESTED\", cancel });\n    if (!defaultPrevented) {\n      dispatch({ type: \"STOP\" });\n      dispatch({ type: \"CLOSE_WINAMP\" });\n    }\n  };\n}\n\nexport function open(): Action {\n  return { type: \"OPEN_WINAMP\" };\n}\n\nexport function toggleVisualizerStyle(): Action {\n  return { type: \"TOGGLE_VISUALIZER_STYLE\" };\n}\n\nexport function minimize(): Action {\n  return { type: \"MINIMIZE_WINAMP\" };\n}\n\nexport function setFocus(input: string): Action {\n  return { type: \"SET_FOCUS\", input };\n}\n\nexport function unsetFocus(): Action {\n  return { type: \"UNSET_FOCUS\" };\n}\n\nexport function focusBand(band: Slider): Action {\n  return { type: \"SET_BAND_FOCUS\", input: \"eq\", bandFocused: band };\n}\n\nexport function loadSerializedState(\n  // In the future this type should be the union of all versioned types.\n  serializedState: SerializedStateV1\n): Thunk {\n  return (dispatch) => {\n    dispatch({ type: \"LOAD_SERIALIZED_STATE\", serializedState });\n    dispatch(ensureWindowsAreOnScreen());\n  };\n}\n\nexport function loadDefaultSkin(): Action {\n  return { type: \"LOAD_DEFAULT_SKIN\" };\n}\n\nexport function toggleMilkdropDesktop(): Thunk {\n  return (dispatch, getState) => {\n    if (Selectors.getMilkdropDesktopEnabled(getState())) {\n      dispatch({ type: \"SET_MILKDROP_DESKTOP\", enabled: false });\n    } else {\n      dispatch({ type: \"SET_MILKDROP_DESKTOP\", enabled: true });\n    }\n  };\n}\n\nexport function setMilkdropFullscreen(enabled: boolean): Action {\n  return { type: \"SET_MILKDROP_FULLSCREEN\", enabled };\n}\nexport function toggleMilkdropFullscreen(): Thunk {\n  return (dispatch, getState) => {\n    dispatch(\n      setMilkdropFullscreen(!Selectors.getMilkdropFullscreenEnabled(getState()))\n    );\n  };\n}\n\nexport function togglePresetOverlay(): Thunk {\n  return (dispatch, getState) => {\n    if (Selectors.getPresetOverlayOpen(getState())) {\n      dispatch(setFocusedWindow(WINDOWS.MILKDROP));\n    }\n\n    dispatch({ type: \"TOGGLE_PRESET_OVERLAY\" });\n  };\n}\n\nexport function stepMarquee(): Action {\n  return { type: \"STEP_MARQUEE\" };\n}\n","import { IMedia } from \"./media\";\nimport { next as nextTrack } from \"./actionCreators\";\nimport * as Selectors from \"./selectors\";\nimport { MiddlewareStore, Action, Dispatch } from \"./types\";\nimport { objectForEach } from \"./utils\";\n\nexport default (media: IMedia) => (store: MiddlewareStore) => {\n  const {\n    media: { volume, balance },\n    equalizer: { sliders },\n  } = store.getState();\n\n  // Ensure the default state is the canonical value.\n  media.setVolume(volume);\n  media.setBalance(balance);\n  media.setPreamp(sliders.preamp);\n  // TODO: Ensure other values like bands are in sync\n\n  media.on(\"timeupdate\", () => {\n    store.dispatch({\n      type: \"UPDATE_TIME_ELAPSED\",\n      elapsed: media.timeElapsed(),\n    });\n  });\n\n  media.on(\"ended\", () => {\n    store.dispatch(nextTrack());\n  });\n\n  media.on(\"playing\", () => {\n    store.dispatch({ type: \"IS_PLAYING\" });\n  });\n\n  media.on(\"waiting\", () => {\n    store.dispatch({ type: \"START_WORKING\" });\n  });\n\n  media.on(\"stopWaiting\", () => {\n    store.dispatch({ type: \"STOP_WORKING\" });\n  });\n\n  media.on(\"fileLoaded\", () => {\n    const id = Selectors.getCurrentTrackId(store.getState());\n    if (id == null) {\n      // Attempted to set the metadata for a track that was already removed.\n      // Really, the media should have been stopped when the track was removed.\n      return;\n    }\n    store.dispatch({\n      id,\n      type: \"SET_MEDIA\",\n      kbps: \"128\",\n      khz: \"44\",\n      channels: 2,\n      length: media.duration(),\n    });\n  });\n\n  return (next: Dispatch) => (action: Action) => {\n    const returnValue = next(action);\n    const state = store.getState();\n    switch (action.type) {\n      case \"PLAY\":\n        media.play();\n        break;\n      case \"PAUSE\":\n        media.pause();\n        break;\n      case \"STOP\":\n        media.stop();\n        break;\n      case \"SET_VOLUME\":\n        media.setVolume(Selectors.getVolume(state));\n        break;\n      case \"SET_BALANCE\":\n        media.setBalance(Selectors.getBalance(state));\n        break;\n      case \"SEEK_TO_PERCENT_COMPLETE\":\n        media.seekToPercentComplete((action as any).percent);\n        break;\n      case \"PLAY_TRACK\": {\n        const url = Selectors.getTrackUrl(store.getState())((action as any).id);\n        if (url != null) {\n          media.loadFromUrl(url, true);\n        }\n        break;\n      }\n      case \"BUFFER_TRACK\": {\n        const url = Selectors.getTrackUrl(store.getState())((action as any).id);\n        if (url != null) {\n          media.loadFromUrl(url, false);\n        }\n        break;\n      }\n      case \"SET_BAND_VALUE\":\n        if ((action as any).band === \"preamp\") {\n          media.setPreamp((action as any).value);\n        } else {\n          media.setEqBand((action as any).band, (action as any).value);\n        }\n        break;\n      case \"SET_EQ_OFF\":\n        media.disableEq();\n        break;\n      case \"SET_EQ_ON\":\n        media.enableEq();\n        break;\n      case \"LOAD_SERIALIZED_STATE\": {\n        // Set ALL THE THINGS!\n        if (Selectors.getEqualizerEnabled(state)) {\n          media.enableEq();\n        } else {\n          media.disableEq();\n        }\n        media.setVolume(Selectors.getVolume(state));\n        media.setBalance(Selectors.getBalance(state));\n        objectForEach(state.equalizer.sliders, (value, slider) => {\n          if (slider === \"preamp\") {\n            media.setPreamp(value);\n          } else {\n            // @ts-ignore I don't know how to teach TypeScript about objects\n            // that use Slider as keys\n            media.setEqBand(slider, value);\n          }\n        });\n        break;\n      }\n    }\n    return returnValue;\n  };\n};\n","import {\n  legacy_createStore as createStore,\n  applyMiddleware,\n  Middleware as ReduxMiddleware,\n} from \"redux\";\nimport thunk from \"redux-thunk\";\nimport { composeWithDevTools } from \"@redux-devtools/extension\";\nimport reducer from \"./reducers\";\nimport mediaMiddleware from \"./mediaMiddleware\";\nimport { merge } from \"./utils\";\nimport { IMedia } from \"./media\";\nimport Emitter from \"./emitter\";\nimport {\n  Extras,\n  Dispatch,\n  Action,\n  PartialState,\n  Middleware,\n  Store,\n} from \"./types\";\n\nconst compose = composeWithDevTools({\n  actionsDenylist: [\"UPDATE_TIME_ELAPSED\", \"STEP_MARQUEE\"],\n});\n\nexport default function createWebampStore(\n  media: IMedia,\n  actionEmitter: Emitter,\n  customMiddlewares: Middleware[] = [],\n  stateOverrides: PartialState | undefined,\n  extras: Extras\n): Store {\n  let initialState;\n  if (stateOverrides) {\n    initialState = merge(\n      reducer(undefined, { type: \"@@init\" }),\n      stateOverrides\n    );\n  }\n\n  const emitterMiddleware = () => (next: Dispatch) => (action: Action) => {\n    actionEmitter.trigger(action.type, action);\n    return next(action);\n  };\n\n  const middlewares: Middleware[] = [\n    thunk.withExtraArgument(extras),\n    mediaMiddleware(media),\n    emitterMiddleware,\n    ...customMiddlewares,\n  ];\n\n  // @ts-expect-error Typing of these is too hard to get right, so we cheat\n  const coercedMiddlewares: ReduxMiddleware[] = middlewares;\n\n  const enhancer = compose(applyMiddleware(...coercedMiddlewares));\n\n  return createStore(reducer, initialState, enhancer);\n}\n","var key = {\r\n    fullscreenEnabled: 0,\r\n    fullscreenElement: 1,\r\n    requestFullscreen: 2,\r\n    exitFullscreen: 3,\r\n    fullscreenchange: 4,\r\n    fullscreenerror: 5,\r\n    fullscreen: 6\r\n};\r\nvar webkit = [\r\n    'webkitFullscreenEnabled',\r\n    'webkitFullscreenElement',\r\n    'webkitRequestFullscreen',\r\n    'webkitExitFullscreen',\r\n    'webkitfullscreenchange',\r\n    'webkitfullscreenerror',\r\n    '-webkit-full-screen',\r\n];\r\nvar moz = [\r\n    'mozFullScreenEnabled',\r\n    'mozFullScreenElement',\r\n    'mozRequestFullScreen',\r\n    'mozCancelFullScreen',\r\n    'mozfullscreenchange',\r\n    'mozfullscreenerror',\r\n    '-moz-full-screen',\r\n];\r\nvar ms = [\r\n    'msFullscreenEnabled',\r\n    'msFullscreenElement',\r\n    'msRequestFullscreen',\r\n    'msExitFullscreen',\r\n    'MSFullscreenChange',\r\n    'MSFullscreenError',\r\n    '-ms-fullscreen',\r\n];\r\n// so it doesn't throw if no window or document\r\nvar document = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {};\r\nvar vendor = (('fullscreenEnabled' in document && Object.keys(key)) ||\r\n    (webkit[0] in document && webkit) ||\r\n    (moz[0] in document && moz) ||\r\n    (ms[0] in document && ms) ||\r\n    []);\r\nvar fscreen = {\r\n    requestFullscreen: function (element) { return element[vendor[key.requestFullscreen]](); },\r\n    requestFullscreenFunction: function (element) { return element[vendor[key.requestFullscreen]]; },\r\n    get exitFullscreen() { return document[vendor[key.exitFullscreen]].bind(document); },\r\n    get fullscreenPseudoClass() { return \":\" + vendor[key.fullscreen]; },\r\n    addEventListener: function (type, handler, options) { return document.addEventListener(vendor[key[type]], handler, options); },\r\n    removeEventListener: function (type, handler, options) { return document.removeEventListener(vendor[key[type]], handler, options); },\r\n    get fullscreenEnabled() { return Boolean(document[vendor[key.fullscreenEnabled]]); },\r\n    set fullscreenEnabled(val) { },\r\n    get fullscreenElement() { return document[vendor[key.fullscreenElement]]; },\r\n    set fullscreenElement(val) { },\r\n    get onfullscreenchange() { return document[(\"on\" + vendor[key.fullscreenchange]).toLowerCase()]; },\r\n    set onfullscreenchange(handler) { return document[(\"on\" + vendor[key.fullscreenchange]).toLowerCase()] = handler; },\r\n    get onfullscreenerror() { return document[(\"on\" + vendor[key.fullscreenerror]).toLowerCase()]; },\r\n    set onfullscreenerror(handler) { return document[(\"on\" + vendor[key.fullscreenerror]).toLowerCase()] = handler; },\r\n};\n\nexport default fscreen;\n//# sourceMappingURL=fscreen.esm.js.map\n","// Adapted from https://github.com/snakesilk/react-fullscreen\nimport { ReactNode, useRef, useLayoutEffect, useEffect } from \"react\";\nimport fscreen from \"fscreen\";\n\ninterface Props {\n  enabled: boolean;\n  children: ReactNode;\n  onChange(fullscreen: boolean): void;\n}\n\nfunction leaveFullScreen() {\n  if (fscreen.fullscreenEnabled) {\n    fscreen.exitFullscreen();\n  }\n}\n\nfunction enterFullScreen(node: HTMLDivElement) {\n  if (fscreen.fullscreenEnabled) {\n    fscreen.requestFullscreen(node);\n  }\n}\n\nfunction FullScreen(props: Props) {\n  const { onChange, enabled } = props;\n  const ref = useRef<HTMLDivElement | null>(null);\n\n  useEffect(() => {\n    function detectFullScreen() {\n      if (onChange) {\n        onChange(fscreen.fullscreenElement === ref.current);\n      }\n    }\n    fscreen.addEventListener(\"fullscreenchange\", detectFullScreen);\n    return () => {\n      fscreen.removeEventListener(\"fullscreenchange\", detectFullScreen);\n    };\n  }, [onChange]);\n\n  // This must run in response to a click event, so we'll use useLayoutEffect just in case.\n  useLayoutEffect(() => {\n    const isEnabled = fscreen.fullscreenElement === ref.current;\n    if (isEnabled && !enabled) {\n      leaveFullScreen();\n    } else if (!isEnabled && enabled && ref.current != null) {\n      enterFullScreen(ref.current);\n    }\n  }, [enabled]);\n\n  return (\n    <div\n      ref={ref}\n      style={props.enabled ? { height: \"100%\", width: \"100%\" } : undefined}\n    >\n      {props.children}\n    </div>\n  );\n}\n\nexport default FullScreen;\n","import {\n  useState,\n  useEffect,\n  useCallback,\n  useLayoutEffect,\n  useRef,\n} from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport * as Utils from \"./utils\";\nimport { Action, Thunk, AppState } from \"./types\";\n\ninterface Size {\n  width: number;\n  height: number;\n}\n\nexport function useUnmountedRef(): { current: boolean } {\n  const unmountedRef = useRef(false);\n  useEffect(() => {\n    return () => {\n      unmountedRef.current = true;\n    };\n  }, []);\n  return unmountedRef;\n}\n\nexport function usePromiseValueOrNull<T>(propValue: Promise<T>): T | null {\n  const [value, setValue] = useState<T | null>(null);\n  useEffect(() => {\n    let disposed = false;\n    propValue.then((resolvedValue) => {\n      if (disposed) {\n        return;\n      }\n      setValue(resolvedValue);\n    });\n\n    return () => {\n      disposed = true;\n    };\n  }, [propValue]);\n\n  return value;\n}\n\nexport function useScreenSize() {\n  const [size] = useState<Size>(Utils.getScreenSize());\n  // TODO: We could subscribe to screen size changes.\n  return size;\n}\n\nexport function useWindowSize() {\n  const [size, setSize] = useState<Size>(Utils.getWindowSize());\n  const handler = useCallback(() => {\n    Utils.throttle(() => {\n      setSize(Utils.getWindowSize());\n    }, 100) as () => void;\n  }, []);\n  useEffect(() => {\n    window.addEventListener(\"resize\", handler);\n    return () => {\n      window.removeEventListener(\"resize\", handler);\n    };\n  }, [handler]);\n  return size;\n}\n\nconst cursorPositionRef = { current: { pageX: 0, pageY: 0 } };\nlet listenerRefCount = 0;\n\n// Global mousemove listener - managed with reference counting\nconst globalMouseMoveHandler = ({ pageX, pageY }: MouseEvent) => {\n  cursorPositionRef.current = { pageX, pageY };\n};\n\n// Add a reference to the global mouse listener\nfunction addGlobalMouseListener() {\n  if (listenerRefCount === 0) {\n    window.document.addEventListener(\"mousemove\", globalMouseMoveHandler);\n  }\n  listenerRefCount++;\n}\n\n// Remove a reference to the global mouse listener\nfunction removeGlobalMouseListener() {\n  listenerRefCount--;\n  if (listenerRefCount === 0) {\n    window.document.removeEventListener(\"mousemove\", globalMouseMoveHandler);\n  }\n}\n\n// We use a single global event listener with reference counting because there is no way to get the\n// mouse position aside from an event. The listener is only active when at least one component needs it.\nfunction useCursorPositionRef() {\n  useEffect(() => {\n    addGlobalMouseListener();\n    return () => {\n      removeGlobalMouseListener();\n    };\n  }, []);\n\n  return cursorPositionRef;\n}\n\n// CSS hover state is not respected if the cursor is already over the node when\n// it is added to the DOM. This hook allows your component to know its hover\n// state on mount without waiting for the mouse to move.\n// https://stackoverflow.com/a/13259049/1263117\nexport function useIsHovered() {\n  const cursorRef = useCursorPositionRef();\n  const [hover, setHover] = useState(false);\n  const [node, setNode] = useState<HTMLElement | null>(null);\n\n  useLayoutEffect(() => {\n    if (node == null) {\n      setHover(false);\n      return;\n    }\n    const domRect = node.getBoundingClientRect();\n    const { pageX, pageY } = cursorRef.current;\n    setHover(\n      pageX >= domRect.left &&\n        pageX <= domRect.right &&\n        pageY >= domRect.top &&\n        pageY <= domRect.bottom\n    );\n\n    const enter = () => setHover(true);\n    const leave = () => setHover(false);\n    node.addEventListener(\"mouseenter\", enter);\n    node.addEventListener(\"mouseleave\", leave);\n\n    return () => {\n      node.removeEventListener(\"mouseenter\", enter);\n      node.removeEventListener(\"mouseleave\", leave);\n    };\n  }, [node, cursorRef]);\n\n  return { ref: setNode, hover };\n}\n\nexport function useOnClickAway(\n  ref: Element | null,\n  callback: null | (() => void)\n) {\n  useEffect(() => {\n    if (ref == null || callback == null) {\n      return;\n    }\n\n    const handleClickOut = (ee: MouseEvent) => {\n      const clickOutTarget = ee.target;\n      if (!(clickOutTarget instanceof Element)) {\n        // TypeScript doesn't realize this will always be true\n        return;\n      }\n      if (ref.contains(clickOutTarget)) {\n        return;\n      }\n      // If the click is _not_ inside the menu.\n      callback();\n      window.document.removeEventListener(\"click\", handleClickOut, {\n        capture: true,\n      });\n    };\n\n    window.document.addEventListener(\"click\", handleClickOut, {\n      capture: true,\n    });\n\n    return () => {\n      window.document.removeEventListener(\"click\", handleClickOut, {\n        capture: true,\n      });\n    };\n  }, [ref, callback]);\n}\n\n// TODO: Return useSelector directly and apply the type without wrapping\nexport function useTypedSelector<T>(selector: (state: AppState) => T): T {\n  return useSelector(selector);\n}\n\nexport function useActionCreator<T extends (...args: any[]) => Action | Thunk>(\n  actionCreator: T\n): (...funcArgs: Parameters<T>) => void {\n  const dispatch = useTypedDispatch();\n  return useCallback(\n    (...args) => dispatch(actionCreator(...args)),\n    [dispatch, actionCreator]\n  );\n}\n\nexport function useTypedDispatch(): (action: Action | Thunk) => void {\n  // useDispatch does not know about thunks. In theory this should be solvable, but I haven't bothered to figure it out:\n  // https://redux.js.org/usage/usage-with-typescript#type-checking-redux-thunks\n  // @ts-ignore\n  return useDispatch();\n}\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import { useState, useEffect, memo } from \"react\";\nimport {\n  WINDOW_RESIZE_SEGMENT_WIDTH,\n  WINDOW_RESIZE_SEGMENT_HEIGHT,\n} from \"../constants\";\nimport * as Utils from \"../utils\";\n\ntype Size = [number, number];\n\ninterface Props {\n  currentSize: Size;\n  setWindowSize(size: Size): void;\n  widthOnly?: boolean;\n  id?: string;\n}\n\nfunction ResizeTarget(props: Props) {\n  const { currentSize, setWindowSize, widthOnly, ...passThroughProps } = props;\n  const [mouseDown, setMouseDown] = useState(false);\n  const [mouseStart, setMouseStart] = useState<null | { x: number; y: number }>(\n    null\n  );\n  useEffect(() => {\n    if (mouseDown === false || mouseStart == null) {\n      return;\n    }\n    const [width, height] = currentSize;\n    const handleMove = (ee: MouseEvent | TouchEvent) => {\n      const x = Utils.getX(ee) - mouseStart.x;\n      const y = Utils.getY(ee) - mouseStart.y;\n\n      const newWidth = Math.max(\n        0,\n        width + Math.round(x / WINDOW_RESIZE_SEGMENT_WIDTH)\n      );\n\n      const newHeight = widthOnly\n        ? width\n        : Math.max(0, height + Math.round(y / WINDOW_RESIZE_SEGMENT_HEIGHT));\n\n      const newSize: Size = [newWidth, newHeight];\n\n      props.setWindowSize(newSize);\n    };\n\n    window.addEventListener(\"mousemove\", handleMove);\n    window.addEventListener(\"touchmove\", handleMove);\n\n    const handleMouseUp = () => setMouseDown(false);\n    window.addEventListener(\"mouseup\", handleMouseUp);\n    window.addEventListener(\"touchend\", handleMouseUp);\n\n    return () => {\n      window.removeEventListener(\"mousemove\", handleMove);\n      window.removeEventListener(\"touchmove\", handleMove);\n      window.removeEventListener(\"mouseup\", handleMouseUp);\n      window.removeEventListener(\"touchend\", handleMouseUp);\n    };\n    // We pruposefully close over the props from when the mouse went down\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [mouseStart, mouseDown]);\n\n  const handleMouseDown = (\n    e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>\n  ) => {\n    setMouseStart({\n      x: Utils.getX(e),\n      y: Utils.getY(e),\n    });\n    setMouseDown(true);\n  };\n\n  return (\n    <div\n      onMouseDown={handleMouseDown}\n      onTouchStart={handleMouseDown}\n      {...passThroughProps}\n    />\n  );\n}\nexport default memo(ResizeTarget);\n","import { useCallback, useState, useEffect } from \"react\";\nimport { WindowId } from \"../types\";\nimport * as Actions from \"../actionCreators\";\nimport * as Selectors from \"../selectors\";\nimport { useActionCreator, useTypedSelector } from \"../hooks\";\n\ninterface Props {\n  onKeyDown?(e: KeyboardEvent): void;\n  windowId: WindowId;\n  children: React.ReactNode;\n}\n\nfunction FocusTarget({ onKeyDown, windowId, children }: Props) {\n  const focusedWindowId = useTypedSelector(Selectors.getFocusedWindow);\n  const setFocus = useActionCreator(Actions.setFocusedWindow);\n\n  const focusHandler = useCallback(() => {\n    if (windowId !== focusedWindowId) {\n      setFocus(windowId);\n    }\n  }, [windowId, focusedWindowId, setFocus]);\n\n  const [ref, setRef] = useState<HTMLDivElement | null>(null);\n\n  useEffect(() => {\n    if (ref == null || onKeyDown == null) {\n      return;\n    }\n    ref.addEventListener(\"keydown\", onKeyDown);\n    return () => ref.removeEventListener(\"keydown\", onKeyDown);\n  }, [onKeyDown, windowId, focusedWindowId, ref]);\n\n  // It's possible for a child component to gain focus and then become\n  // unmounted. In that case, the browser will return focus to the `<body>`.\n  // In the following hook, use a `MutationObserver` to watch for that behavior\n  // and refocus the containing FocusTarget when it happens.\n  //\n  // I tried a number of other approaches using `focus/blur/focusin/focusout` on\n  // various DOM nodes, and was unable to find a solution which would trigger in\n  // this senario in Firefox. Therefore we use this `MutationObserver` approach.\n  useEffect(() => {\n    // Only create the `MutationObserver` within the currently focused target.\n    if (ref == null || windowId !== focusedWindowId) {\n      return;\n    }\n\n    const observer = new MutationObserver((mutations) => {\n      // In the common case we won't have focused the body, so we can do this\n      // inexpensive check first to avoid calling the more expensive `O(n)`\n      // check of the individual mutations.\n      if (document.activeElement !== document.body) {\n        return;\n      }\n      if (mutations.some((mutation) => mutation.removedNodes.length > 0)) {\n        ref.focus();\n      }\n    });\n\n    observer.observe(ref, {\n      subtree: true,\n      attributes: false,\n      childList: true,\n    });\n\n    return () => observer.disconnect();\n  }, [windowId, focusedWindowId, ref]);\n\n  return (\n    <div\n      ref={setRef}\n      onPointerDown={focusHandler}\n      onFocus={focusHandler}\n      tabIndex={-1}\n      style={{ height: \"100%\", width: \"100%\" }}\n    >\n      {children}\n    </div>\n  );\n}\n\nexport default FocusTarget;\n","import classnames from \"classnames\";\nimport {\n  useCallback,\n  DetailedHTMLProps,\n  HTMLAttributes,\n  useState,\n  PointerEvent as ReactPointerEvent,\n} from \"react\";\n\nconst ACTIVE_CLASSNAME = \"winamp-active\";\nconst LEFT_MOUSE_NUMBER = 0;\n\ninterface DetailedHTMLPropsAndMore\n  extends DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement> {\n  requireClicksOriginateLocally?: boolean;\n}\n\ntype Props = DetailedHTMLPropsAndMore;\n\n/**\n * Renders a `div` with an `.winamp-active` class if the element is being clicked/tapped.\n *\n * For now this mimicks the behavior of `:active`, but in the future we will use\n * this component to mimic Winamp's behavior, which is quite different than\n * `:active`.\n *\n * https://html.spec.whatwg.org/multipage/semantics-other.html#selector-active\n *\n * > An element is said to be being actively pointed at while the user indicates\n * > the element using a pointing device while that pointing device is in the\n * > \"down\" state (e.g. for a mouse, between the time the mouse button is pressed\n * > and the time it is depressed; for a finger in a multitouch environment, while\n * > the finger is touching the display surface).\n */\nexport default function WinampButton({\n  requireClicksOriginateLocally = true,\n  onPointerDown: originalOnPointerDown,\n  className,\n  ...htmlProps\n}: Props): JSX.Element {\n  const [active, setActive] = useState(false);\n\n  const onPointerDown = useCallback(\n    (e: ReactPointerEvent<HTMLDivElement>) => {\n      if (originalOnPointerDown != null) {\n        originalOnPointerDown(e);\n      }\n      // Release the pointer capture\n      // https://w3c.github.io/pointerevents/#implicit-pointer-capture\n      // https://w3c.github.io/pointerevents/#pointer-capture\n      if (!requireClicksOriginateLocally) {\n        // @ts-ignore\n        e.target.releasePointerCapture(e.pointerId);\n      }\n      // We only care about left mouse.\n      // -1 button comes on onPointerEnter so we allow that.\n      if (\n        e.nativeEvent.button !== -1 &&\n        e.nativeEvent.button !== LEFT_MOUSE_NUMBER\n      ) {\n        return;\n      }\n      setActive(true);\n\n      function onRelease(ee: PointerEvent) {\n        setActive(false);\n        document.removeEventListener(\"pointerup\", onRelease);\n      }\n      document.addEventListener(\"pointerup\", onRelease);\n    },\n    [originalOnPointerDown, requireClicksOriginateLocally]\n  );\n\n  // We watch for events onPointerEnter only when requireClicksOriginateLocally === false\n  // If the pointer enters the WinampButton area, and the pointer button is already down, trigger a PointerDown\n  const onPointerEnter = (e: React.PointerEvent<HTMLDivElement>) => {\n    if (e.buttons === 1) {\n      // Emit a CustomEvent pointerup to get the other buttons to release.\n      // Add a special -42 detail value so we can identify this event elsewhere and ignore if needed.\n      document.dispatchEvent(\n        new CustomEvent(\"pointerup\", {\n          detail: -42,\n        })\n      );\n      // Simulate a pointerdown on the current button\n      onPointerDown(e);\n    }\n  };\n\n  return (\n    <div\n      {...htmlProps}\n      className={classnames(className, { [ACTIVE_CLASSNAME]: active })}\n      onPointerDown={onPointerDown}\n      onPointerEnter={\n        requireClicksOriginateLocally ? undefined : onPointerEnter\n      }\n    />\n  );\n}\n","import * as React from \"react\";\nimport classnames from \"classnames\";\n\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport ResizeTarget from \"../ResizeTarget\";\nimport { WindowId } from \"../../types\";\nimport FocusTarget from \"../FocusTarget\";\nimport { useActionCreator, useTypedSelector } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\ninterface TextProps {\n  children: string;\n}\n\nconst Text = ({ children }: TextProps) => {\n  const letters = children.split(\"\");\n  return (\n    <React.Fragment>\n      {letters.map((letter, i) => (\n        <div\n          key={i}\n          className={`draggable gen-text-letter gen-text-${\n            letter === \" \" ? \"space\" : letter.toLowerCase()\n          }`}\n        />\n      ))}\n    </React.Fragment>\n  );\n};\n\nconst CHROME_WIDTH = 19;\nconst CHROME_HEIGHT = 34;\n\ninterface WindowSize {\n  width: number;\n  height: number;\n}\n\ninterface Props {\n  windowId: WindowId;\n  children: (windowSize: WindowSize) => React.ReactNode;\n  title: string;\n  onKeyDown?(e: KeyboardEvent): void;\n}\n\n// Named export for testing\nexport const GenWindow = ({ children, title, windowId, onKeyDown }: Props) => {\n  const setWindowSize = useActionCreator(Actions.setWindowSize);\n  const closeWindow = useActionCreator(Actions.closeWindow);\n  const getWindowPixelSize = useTypedSelector(Selectors.getWindowPixelSize);\n  const focusedWindow = useTypedSelector(Selectors.getFocusedWindow);\n  const getWindowSize = useTypedSelector(Selectors.getWindowSize);\n  const windowSize = getWindowSize(windowId);\n  const selected = focusedWindow === windowId;\n  const { width, height } = getWindowPixelSize(windowId);\n  return (\n    <FocusTarget windowId={windowId} onKeyDown={onKeyDown}>\n      <div\n        className={classnames(\"gen-window\", \"window\", { selected })}\n        style={{ width, height }}\n      >\n        <div className=\"gen-top draggable\">\n          <div className=\"gen-top-left draggable\" />\n          <div className=\"gen-top-left-fill draggable\" />\n          <div className=\"gen-top-left-end draggable\" />\n          <div className=\"gen-top-title draggable\">\n            <Text>{title}</Text>\n          </div>\n          <div className=\"gen-top-right-end draggable\" />\n          <div className=\"gen-top-right-fill draggable\" />\n          <div className=\"gen-top-right draggable\">\n            <WinampButton\n              className=\"gen-close selected\"\n              onClick={() => closeWindow(windowId)}\n            />\n          </div>\n        </div>\n        <div className=\"gen-middle\">\n          <div className=\"gen-middle-left draggable\">\n            <div className=\"gen-middle-left-bottom draggable\" />\n          </div>\n          <div className=\"gen-middle-center\">\n            {children({\n              width: width - CHROME_WIDTH,\n              height: height - CHROME_HEIGHT,\n            })}\n          </div>\n          <div className=\"gen-middle-right draggable\">\n            <div className=\"gen-middle-right-bottom draggable\" />\n          </div>\n        </div>\n        <div className=\"gen-bottom draggable\">\n          <div className=\"gen-bottom-left draggable\" />\n          <div className=\"gen-bottom-right draggable\">\n            <ResizeTarget\n              currentSize={windowSize}\n              setWindowSize={(size) => setWindowSize(windowId, size)}\n              id={\"gen-resize-target\"}\n            />\n          </div>\n        </div>\n      </div>\n    </FocusTarget>\n  );\n};\n\nexport default GenWindow;\n","import { useEffect, useState, useRef } from \"react\";\nimport { VISUALIZERS } from \"../../constants\";\nimport * as Selectors from \"../../selectors\";\nimport { TransitionType } from \"../../types\";\nimport { useTypedSelector } from \"../../hooks\";\n\ntype ButterchurnVisualizer = {\n  setRendererSize(width: number, height: number): void;\n  loadPreset(preset: Object, transitionTime: number): void;\n  launchSongTitleAnim(title: string): void;\n  render(): void;\n};\n\ninterface Props {\n  analyser: AnalyserNode;\n  height: number;\n  width: number;\n}\n\nconst TRANSITION_TYPE_DURATIONS = {\n  [TransitionType.DEFAULT]: 2.7,\n  [TransitionType.IMMEDIATE]: 0,\n  [TransitionType.USER_PRESET]: 5.7,\n};\n\nfunction Visualizer({ analyser, width, height }: Props) {\n  const visualizerStyle = useTypedSelector(Selectors.getVisualizerStyle);\n  const playing = useTypedSelector(Selectors.getMediaIsPlaying);\n  const butterchurn = useTypedSelector(Selectors.getButterchurn);\n  const trackTitle = useTypedSelector(Selectors.getCurrentTrackDisplayName);\n  const currentPreset = useTypedSelector(Selectors.getCurrentPreset);\n  const transitionType = useTypedSelector(Selectors.getPresetTransitionType);\n  const message = useTypedSelector(Selectors.getMilkdropMessage);\n\n  const isEnabledVisualizer = visualizerStyle === VISUALIZERS.MILKDROP;\n\n  const canvasRef = useRef(null);\n  const [visualizer, setVisualizer] = useState<ButterchurnVisualizer | null>(\n    null\n  );\n\n  // Initialize the visualizer\n  useEffect(() => {\n    if (canvasRef.current == null || butterchurn == null) {\n      return;\n    }\n    if (visualizer != null) {\n      // Note: The visualizer does not offer anyway to clean itself up. So, we\n      // don't offer any way to recreate it. So, if you swap out the analyser\n      // node, or the canvas, that change won't be respected.\n      return;\n    }\n    const _visualizer = butterchurn.createVisualizer(\n      analyser.context,\n      canvasRef.current,\n      {\n        width,\n        height,\n        meshWidth: 32,\n        meshHeight: 24,\n        pixelRatio: window.devicePixelRatio || 1,\n        // Webamp may support rendering Milkdrop presets from untrusted sources.\n        // By using `onlyUseWASM` here we instruct Butterchurn not to `eval`\n        // JavaScript code included in older Butterchurn preset `.json` files.\n        // https://jordaneldredge.com/blog/speeding-up-winamps-music-visualizer-with-webassembly/#security\n        onlyUseWASM: true,\n      }\n    );\n    _visualizer.connectAudio(analyser);\n    setVisualizer(_visualizer);\n  }, [butterchurn, analyser, height, width, visualizer]);\n\n  // Ensure render size stays up to date\n  useEffect(() => {\n    if (visualizer == null) {\n      return;\n    }\n    visualizer.setRendererSize(width, height);\n  }, [visualizer, width, height]);\n\n  // Load presets when they change\n  const hasLoadedPreset = useRef<boolean>(false);\n  useEffect(() => {\n    if (visualizer == null || currentPreset == null) {\n      return;\n    }\n    if (hasLoadedPreset.current) {\n      visualizer.loadPreset(\n        currentPreset,\n        TRANSITION_TYPE_DURATIONS[transitionType]\n      );\n    } else {\n      visualizer.loadPreset(\n        currentPreset,\n        TRANSITION_TYPE_DURATIONS[TransitionType.IMMEDIATE]\n      );\n      hasLoadedPreset.current = true;\n    }\n    // We don't want to trigger the transition if the transition type changes.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [visualizer, currentPreset]);\n\n  // Handle title animations\n  useEffect(() => {\n    if (visualizer == null || !trackTitle) {\n      return;\n    }\n    visualizer.launchSongTitleAnim(trackTitle);\n  }, [visualizer, trackTitle]);\n\n  const lastShownMessage = useRef<null | number>(null);\n\n  useEffect(() => {\n    if (visualizer == null || message == null) {\n      return;\n    }\n    if (\n      lastShownMessage.current == null ||\n      message.time > lastShownMessage.current\n    ) {\n      lastShownMessage.current = Date.now();\n      visualizer.launchSongTitleAnim(message.text);\n    }\n  }, [visualizer, message]);\n\n  const shouldAnimate = playing && isEnabledVisualizer;\n\n  // Kick off the animation loop\n  useEffect(() => {\n    if (!shouldAnimate || visualizer == null) {\n      return;\n    }\n    let animationFrameRequest: number | null = null;\n    const loop = () => {\n      visualizer.render();\n      animationFrameRequest = window.requestAnimationFrame(loop);\n    };\n    loop();\n    return () => {\n      if (animationFrameRequest != null) {\n        window.cancelAnimationFrame(animationFrameRequest);\n      }\n    };\n  }, [visualizer, shouldAnimate]);\n\n  return (\n    <canvas\n      height={height}\n      width={width}\n      style={{\n        height: \"100%\",\n        width: \"100%\",\n        display: isEnabledVisualizer ? \"block\" : \"none\",\n      }}\n      ref={canvasRef}\n    />\n  );\n}\n\nexport default Visualizer;\n","import * as React from \"react\";\n\ninterface Props {\n  innerRef?: (node: HTMLDivElement) => void;\n  children: React.ReactNode;\n}\n\nconst Background = (props: Props) => {\n  const { innerRef } = props;\n  return (\n    <div\n      ref={innerRef}\n      className=\"draggable\"\n      style={{\n        // This color will be used until Butterchurn is loaded\n        backgroundColor: \"#000\",\n        position: \"absolute\",\n        top: 0,\n        bottom: 0,\n        left: 0,\n        right: 0,\n        height: \"100%\",\n        width: \"100%\",\n      }}\n      tabIndex={0}\n    >\n      {props.children}\n    </div>\n  );\n};\n\nexport default Background;\n","import { useState, useCallback } from \"react\";\nimport { promptForFileReferences } from \"../../fileUtils\";\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport { clamp } from \"../../utils\";\nimport { TransitionType } from \"../../types\";\nimport {\n  useUnmountedRef,\n  useActionCreator,\n  useTypedSelector,\n} from \"../../hooks\";\n\nconst ENTRY_HEIGHT = 14;\nconst HEIGHT_PADDING = 15;\nconst WIDTH_PADDING = 20;\n\nconst LOADING_STYLE: React.CSSProperties = {\n  position: \"absolute\",\n  top: 0,\n  left: 0,\n  color: \"white\",\n  background: \"rgba(0.33, 0.33, 0.33, 0.33)\",\n};\n\nconst OUTER_WRAPPER_STYLE: React.CSSProperties = {\n  position: \"absolute\",\n  top: 0,\n  left: 0,\n  padding: \"15px 10px 0 10px\",\n};\n\nconst INNER_WRAPPER_STYLE: React.CSSProperties = {\n  display: \"inline-block\",\n  whiteSpace: \"nowrap\",\n  overflow: \"hidden\",\n  background: \"rgba(0, 0, 0, 0.815)\",\n  fontSize: \"12px\",\n};\n\ninterface Props {\n  height: number;\n  width: number;\n}\n\nfunction presetIndexFromListIndex(listIndex: number) {\n  return listIndex - 1;\n}\n\nfunction listIndexFromPresetIndex(listIndex: number) {\n  return listIndex + 1;\n}\n\nfunction PresetOverlay({ height, width }: Props) {\n  const presetKeys = useTypedSelector(Selectors.getPresetNames);\n  const currentPresetIndex = useTypedSelector(Selectors.getCurrentPresetIndex);\n  const requestPresetAtIndex = useActionCreator(Actions.requestPresetAtIndex);\n  const togglePresetOverlay = useActionCreator(Actions.togglePresetOverlay);\n  const appendPresetFileList = useActionCreator(Actions.appendPresetFileList);\n\n  const unmountedRef = useUnmountedRef();\n  const [selectedListIndex, setSelectedListIndex] = useState(() => {\n    if (currentPresetIndex != null) {\n      return listIndexFromPresetIndex(currentPresetIndex);\n    }\n    return 0;\n  });\n\n  // Number of presets, plus one for the \"Load Local Directory\" option, minus\n  // one to convert a length to an index.\n  const maxListIndex = presetKeys.length; // - 1 + 1;\n\n  const renderList = useCallback(() => {\n    const maxVisibleRows = Math.floor((height - HEIGHT_PADDING) / ENTRY_HEIGHT);\n    const rowsToShow = Math.floor(maxVisibleRows * 0.75); // Only fill 3/4 of the screen.\n    const [startIndex, endIndex] = getRangeCenteredOnIndex(\n      maxListIndex + 1, // Add one to convert an index to a length\n      rowsToShow,\n      selectedListIndex\n    );\n\n    const presetElms = [];\n    for (let i = startIndex; i <= endIndex; i++) {\n      const presetIndex = presetIndexFromListIndex(i);\n      const isSelected = i === selectedListIndex;\n      const isCurrent = presetIndex === currentPresetIndex;\n      let color: string;\n      if (isSelected) {\n        color = isCurrent ? \"#FFCC22\" : \"#FF5050\";\n      } else {\n        color = isCurrent ? \"#CCFF03\" : \"#CCCCCC\";\n      }\n      presetElms.push(\n        <li key={i} style={{ color, lineHeight: `${ENTRY_HEIGHT}px` }}>\n          {i === 0 ? \"Load Local Directory\" : presetKeys[presetIndex]}\n        </li>\n      );\n    }\n\n    return presetElms;\n  }, [currentPresetIndex, height, maxListIndex, presetKeys, selectedListIndex]);\n\n  const loadLocalDir = useCallback(async () => {\n    const fileReferences = await promptForFileReferences({ directory: true });\n    if (unmountedRef.current) {\n      return;\n    }\n    appendPresetFileList(fileReferences);\n  }, [appendPresetFileList, unmountedRef]);\n\n  const handleFocusedKeyboardInput = useCallback(\n    (e: React.KeyboardEvent<HTMLDivElement>) => {\n      switch (e.keyCode) {\n        case 38: // up arrow\n          setSelectedListIndex((value) => Math.max(value - 1, 0));\n          e.stopPropagation();\n          break;\n        case 40: // down arrow\n          setSelectedListIndex((value) => Math.min(value + 1, maxListIndex));\n          e.stopPropagation();\n          break;\n        case 13: // enter\n          if (selectedListIndex === 0) {\n            loadLocalDir();\n          } else {\n            requestPresetAtIndex(\n              presetIndexFromListIndex(selectedListIndex),\n              TransitionType.DEFAULT,\n              true\n            );\n          }\n          e.stopPropagation();\n          break;\n        case 27: // escape\n          togglePresetOverlay();\n          e.stopPropagation();\n          break;\n      }\n    },\n    [\n      loadLocalDir,\n      maxListIndex,\n      requestPresetAtIndex,\n      selectedListIndex,\n      togglePresetOverlay,\n    ]\n  );\n\n  const handleNode = useCallback((node: HTMLDivElement | null) => {\n    if (node != null && document.activeElement !== node) {\n      node.focus();\n    }\n  }, []);\n\n  if (presetKeys == null) {\n    return (\n      <div style={LOADING_STYLE}>\n        <span>Loading presets</span>\n      </div>\n    );\n  }\n  return (\n    <div\n      ref={handleNode}\n      tabIndex={-1}\n      style={OUTER_WRAPPER_STYLE}\n      onKeyDown={handleFocusedKeyboardInput}\n    >\n      <div\n        style={{\n          ...INNER_WRAPPER_STYLE,\n          width: width - 20 - WIDTH_PADDING,\n          maxHeight: height - HEIGHT_PADDING,\n        }}\n      >\n        <ul style={{ listStyleType: \"none\", padding: 0, margin: 0 }}>\n          {renderList()}\n        </ul>\n      </div>\n    </div>\n  );\n}\n\n// Find a tuple `[startIndex, endIndex]` representing start/end indexes into an\n// array of length `length`, that descripe a range of size up to `rangeSize`\n// where a best effort is made to center `indexToCenter`.\nexport function getRangeCenteredOnIndex(\n  length: number,\n  maxRangeSize: number,\n  indexToCenter: number\n): [number, number] {\n  const rangeSize = Math.min(length, maxRangeSize);\n  const halfRangeSize = Math.floor(rangeSize / 2);\n  const idealStartIndex = indexToCenter - halfRangeSize;\n  const startIndex = clamp(idealStartIndex, 0, length - rangeSize);\n  const endIndex = startIndex + rangeSize - 1;\n  return [startIndex, endIndex];\n}\nexport default PresetOverlay;\n","import { useCallback, useEffect, useRef } from \"react\";\nimport { useActionCreator } from \"../hooks\";\nimport * as Actions from \"../actionCreators\";\nimport { WindowId } from \"../types\";\n\ninterface Coord {\n  x: number;\n  y: number;\n}\n\ninterface Props extends React.HTMLAttributes<HTMLDivElement> {\n  handleDrop(e: React.DragEvent<HTMLDivElement>, coord: Coord): void;\n  windowId: WindowId;\n  onWheelActive?: (e: WheelEvent) => void;\n}\n\nfunction suppress(e: React.DragEvent<HTMLDivElement>) {\n  e.stopPropagation();\n  e.preventDefault();\n  e.dataTransfer.dropEffect = \"link\";\n  e.dataTransfer.effectAllowed = \"link\";\n}\n\nexport default function DropTarget(props: Props) {\n  const {\n    // eslint-disable-next-line no-shadow, no-unused-vars\n    handleDrop,\n    windowId,\n    onWheelActive,\n    ...passThroughProps\n  } = props;\n\n  const divRef = useRef<HTMLDivElement>(null);\n  const droppedFiles = useActionCreator(Actions.droppedFiles);\n\n  // Register onWheelActive as a non-passive event handler\n  useEffect(() => {\n    const element = divRef.current;\n    if (!element || !onWheelActive) {\n      return;\n    }\n\n    const handleWheel = (e: WheelEvent) => {\n      // Convert native WheelEvent to React.WheelEvent\n      onWheelActive(e);\n    };\n\n    element.addEventListener(\"wheel\", handleWheel, { passive: false });\n\n    return () => {\n      element.removeEventListener(\"wheel\", handleWheel);\n    };\n  }, [onWheelActive]);\n\n  const onDrop = useCallback(\n    (e: React.DragEvent<HTMLDivElement>) => {\n      suppress(e);\n      droppedFiles(e, windowId);\n      // TODO: We could probably move this coordinate logic into the playlist.\n      // I think that's the only place it gets used.\n      const { currentTarget } = e;\n      if (!(currentTarget instanceof Element)) {\n        return;\n      }\n\n      const { left: x, top: y } = currentTarget.getBoundingClientRect();\n      handleDrop(e, { x, y });\n    },\n    [handleDrop, droppedFiles, windowId]\n  );\n  return (\n    <div\n      ref={divRef}\n      {...passThroughProps}\n      onDragStart={suppress}\n      onDragEnter={suppress}\n      onDragOver={suppress}\n      onDrop={onDrop}\n    />\n  );\n}\n","import { useMemo, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport classnames from \"classnames\";\n\nimport { useTypedSelector } from \"../hooks\";\nimport * as Selectors from \"../selectors\";\n\ninterface PortalProps {\n  zIndex: number;\n  top: number;\n  left: number;\n  children: JSX.Element[] | JSX.Element;\n}\n\nconst Portal = (props: PortalProps) => {\n  const node: HTMLDivElement = useMemo(() => {\n    const div = document.createElement(\"div\");\n    div.id = \"webamp-context-menu\";\n    div.style.position = \"absolute\";\n    div.style.top = \"0\";\n    div.style.left = \"0\";\n    div.style.zIndex = String(props.zIndex + 1);\n    return div;\n  }, [props.zIndex]);\n\n  useEffect(() => {\n    document.body.appendChild(node);\n    return () => {\n      document.body.removeChild(node);\n    };\n  }, [node]);\n\n  const style: React.CSSProperties = {\n    top: props.top,\n    left: props.left,\n    position: \"absolute\",\n  };\n  return createPortal(<div style={style}>{props.children}</div>, node);\n};\n\nexport const Hr = () => (\n  <li className=\"hr\">\n    <hr />\n  </li>\n);\n\ninterface ParentProps {\n  label: string;\n  children: React.ReactNode;\n}\n\nexport const Parent = ({ children, label }: ParentProps) => (\n  <li className=\"parent\">\n    <ul>{children}</ul>\n    {label}\n  </li>\n);\n\ninterface LinkNodeProps {\n  label: string;\n  href: string;\n  target?: string;\n}\n\nexport const LinkNode = (props: LinkNodeProps) => (\n  <li>\n    <a {...props}>{props.label}</a>\n  </li>\n);\n\ninterface NodeProps {\n  label: string;\n  checked?: boolean;\n  hotkey?: string;\n  className?: string;\n  // TODO: Figure out how to do passthrough props\n  onClick?: () => void;\n}\n\nexport const Node = (props: NodeProps) => {\n  const { label, checked, className = \"\", ...passThroughProps } = props;\n  return (\n    <li className={classnames(className, { checked })} {...passThroughProps}>\n      {label}\n    </li>\n  );\n};\n\ninterface ContextMenuProps {\n  children: React.ReactNode;\n  offsetTop: number;\n  offsetLeft: number;\n  top?: boolean;\n  bottom?: boolean;\n  // TODO: Remove this. Just conditionally render in the parent.\n  selected: boolean;\n}\n\nexport default function ContextMenu({\n  children,\n  offsetTop,\n  offsetLeft,\n  top,\n  bottom,\n  selected,\n}: ContextMenuProps) {\n  const zIndex = useTypedSelector(Selectors.getZIndex);\n  if (!selected) {\n    return null;\n  }\n  return (\n    <Portal top={offsetTop} left={offsetLeft} zIndex={zIndex}>\n      <ul className={classnames(\"context-menu\", { top, bottom })}>\n        {children}\n      </ul>\n    </Portal>\n  );\n}\n","import { ReactNode, useState, useEffect, useCallback } from \"react\";\nimport ContextMenu from \"./ContextMenu\";\n\ninterface Props {\n  renderContents(): ReactNode;\n  children: ReactNode;\n}\n\n// Trigger a context menu at the user's cursor position when the user right\n// clicks within this component.\n// For a component that triggers relative to a given component when the user\n// left-clicks see `<ContextMenuTarget />`.\n\n// TODO: Consider using nested contexts to ensure we don't ever have multiple\n// non-nested context menus open at a time.\nexport default function ContextMenuWraper({\n  children,\n  renderContents,\n  ...passThroughProps\n}: Props) {\n  const [openPosition, setOpenPosition] = useState<{\n    x: number;\n    y: number;\n  } | null>(null);\n\n  const closeMenu = useCallback(() => {\n    setOpenPosition(null);\n  }, []);\n\n  const handleGlobalClick = useCallback(\n    (e: MouseEvent) => {\n      if (e.button !== 2) {\n        closeMenu();\n      }\n    },\n    [closeMenu]\n  );\n\n  const handleRightClick = useCallback(\n    (e: React.MouseEvent<HTMLDivElement>) => {\n      const { pageX, pageY } = e;\n      // TODO: We could do an initial render to see if the menu fits here\n      // and do a second render if it does not.\n      setOpenPosition({ x: pageX, y: pageY });\n      e.preventDefault();\n      e.stopPropagation();\n    },\n    []\n  );\n\n  // Add click-away listeners when window is open\n  useEffect(() => {\n    if (openPosition == null) {\n      return;\n    }\n    document.addEventListener(\"click\", handleGlobalClick);\n    document.body.addEventListener(\"contextmenu\", closeMenu);\n\n    return () => {\n      document.removeEventListener(\"click\", handleGlobalClick);\n      document.body.removeEventListener(\"contextmenu\", closeMenu);\n    };\n  }, [openPosition, closeMenu, handleGlobalClick]);\n\n  return (\n    <div\n      onContextMenu={handleRightClick}\n      style={{ width: \"100%\", height: \"100%\" }}\n      {...passThroughProps}\n    >\n      <ContextMenu\n        selected={openPosition != null}\n        offsetTop={openPosition?.y ?? 0}\n        offsetLeft={openPosition?.x ?? 0}\n      >\n        {renderContents()}\n      </ContextMenu>\n      {children}\n    </div>\n  );\n}\n","import { ReactNode } from \"react\";\nimport { Hr, Node } from \"../ContextMenu\";\nimport { WINDOWS } from \"../../constants\";\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport ContextMenuWrapper from \"../ContextMenuWrapper\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport fscreen from \"fscreen\";\n\ninterface Props {\n  children: ReactNode;\n}\n\nconst MilkdropContextMenu = (props: Props) => {\n  const desktop = useTypedSelector(Selectors.getMilkdropDesktopEnabled);\n\n  const closeWindow = useActionCreator(Actions.closeWindow);\n  const toggleDesktop = useActionCreator(Actions.toggleMilkdropDesktop);\n  const toggleFullscreen = useActionCreator(Actions.toggleMilkdropFullscreen);\n\n  return (\n    <ContextMenuWrapper\n      renderContents={() => {\n        return (\n          <>\n            {fscreen.fullscreenEnabled && (\n              <Node\n                onClick={toggleFullscreen}\n                label=\"Fullscreen\"\n                hotkey=\"Alt+Enter\"\n              />\n            )}\n            <Node\n              onClick={toggleDesktop}\n              checked={desktop}\n              label=\"Desktop Mode\"\n              hotkey=\"Alt+D\"\n            />\n            <Hr />\n            <Node onClick={() => closeWindow(WINDOWS.MILKDROP)} label=\"Quit\" />\n          </>\n        );\n      }}\n    >\n      {props.children}\n    </ContextMenuWrapper>\n  );\n};\n\nexport default MilkdropContextMenu;\n","import * as React from \"react\";\nimport { ReactNode } from \"react\";\nimport ReactDOM from \"react-dom\";\n\ninterface Props {\n  children: ReactNode;\n}\n\nconst Desktop = React.memo(({ children }: Props) => {\n  const [desktopNode] = React.useState(() => document.createElement(\"div\"));\n\n  React.useEffect(() => {\n    desktopNode.classList.add(\"webamp-desktop\");\n    document.body.appendChild(desktopNode);\n    return () => {\n      document.body.removeChild(desktopNode);\n    };\n  }, [desktopNode]);\n\n  return ReactDOM.createPortal(children, desktopNode);\n});\n\nexport default Desktop;\n","import { useEffect, useCallback } from \"react\";\nimport Fullscreen from \"../Fullscreen\";\nimport {\n  useWindowSize,\n  useScreenSize,\n  useTypedSelector,\n  useActionCreator,\n} from \"../../hooks\";\nimport GenWindow from \"../GenWindow\";\nimport { WINDOWS } from \"../../constants\";\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport { TransitionType } from \"../../types\";\nimport Visualizer from \"./Visualizer\";\n\nimport Background from \"./Background\";\nimport PresetOverlay from \"./PresetOverlay\";\nimport DropTarget from \"../DropTarget\";\nimport MilkdropContextMenu from \"./MilkdropContextMenu\";\nimport Desktop from \"./Desktop\";\nimport fscreen from \"fscreen\";\n\nconst MILLISECONDS_BETWEEN_PRESET_TRANSITIONS = 15000;\n\ninterface Props {\n  analyser: AnalyserNode;\n}\n\nfunction useKeyHandler() {\n  const trackTitle = useTypedSelector(Selectors.getCurrentTrackDisplayName);\n\n  const selectNextPreset = useActionCreator(Actions.selectNextPreset);\n  const selectPreviousPreset = useActionCreator(Actions.selectPreviousPreset);\n  const toggleRandomize = useActionCreator(Actions.toggleRandomizePresets);\n  const togglePresetOverlay = useActionCreator(Actions.togglePresetOverlay);\n  const scheduleMilkdropMessage = useActionCreator(\n    Actions.scheduleMilkdropMessage\n  );\n  const toggleCycling = useActionCreator(Actions.togglePresetCycling);\n\n  // Handle keyboard events\n  return useCallback(\n    (e: KeyboardEvent) => {\n      switch (e.keyCode) {\n        case 32: // spacebar\n          selectNextPreset();\n          break;\n        case 8: // backspace\n          selectPreviousPreset(TransitionType.IMMEDIATE);\n          break;\n        case 72: // H\n          selectNextPreset(TransitionType.IMMEDIATE);\n          break;\n        case 82: // R\n          toggleRandomize();\n          break;\n        case 76: // L\n          togglePresetOverlay();\n          e.stopPropagation();\n          break;\n        case 84: // T\n          if (trackTitle != null) {\n            scheduleMilkdropMessage(trackTitle);\n          }\n          e.stopPropagation();\n          break;\n        case 145: // scroll lock\n        case 125: // F14 (scroll lock for OS X)\n          toggleCycling();\n          break;\n      }\n    },\n    [\n      scheduleMilkdropMessage,\n      selectNextPreset,\n      selectPreviousPreset,\n      toggleCycling,\n      togglePresetOverlay,\n      toggleRandomize,\n      trackTitle,\n    ]\n  );\n}\n\nfunction Milkdrop({ analyser }: Props) {\n  const desktop = useTypedSelector(Selectors.getMilkdropDesktopEnabled);\n  const fullscreen = useTypedSelector(Selectors.getMilkdropFullscreenEnabled);\n  const overlay = useTypedSelector(Selectors.getPresetOverlayOpen);\n  const presetsAreCycling = useTypedSelector(Selectors.getPresetsAreCycling);\n  const currentPresetIndex = useTypedSelector(Selectors.getCurrentPresetIndex);\n  const mediaIsPlaying = useTypedSelector(Selectors.getMediaIsPlaying);\n\n  const toggleFullscreen = useActionCreator(Actions.toggleMilkdropFullscreen);\n  const selectNextPreset = useActionCreator(Actions.selectNextPreset);\n  const handlePresetDrop = useActionCreator(Actions.handlePresetDrop);\n  const setFullscreen = useActionCreator(Actions.setMilkdropFullscreen);\n\n  const handleKeyDown = useKeyHandler();\n\n  // Cycle presets\n  useEffect(() => {\n    if (!presetsAreCycling || !mediaIsPlaying) {\n      return;\n    }\n    const intervalId = setInterval(\n      selectNextPreset,\n      MILLISECONDS_BETWEEN_PRESET_TRANSITIONS\n    );\n    return () => clearInterval(intervalId);\n  }, [presetsAreCycling, currentPresetIndex, mediaIsPlaying, selectNextPreset]);\n\n  const screenSize = useScreenSize();\n  const windowSize = useWindowSize();\n\n  const toggleFullScreenIfEnabled = useCallback(() => {\n    if (fscreen.fullscreenEnabled) {\n      toggleFullscreen();\n    }\n  }, [toggleFullscreen]);\n\n  if (desktop) {\n    return (\n      <Desktop>\n        <MilkdropContextMenu>\n          <Visualizer {...windowSize} analyser={analyser} />\n        </MilkdropContextMenu>\n      </Desktop>\n    );\n  }\n\n  return (\n    <GenWindow\n      title={\"Milkdrop\"}\n      windowId={WINDOWS.MILKDROP}\n      onKeyDown={handleKeyDown}\n    >\n      {(genWindowSize: { width: number; height: number }) => {\n        const size = fullscreen ? screenSize : genWindowSize;\n        return (\n          <MilkdropContextMenu>\n            <Background>\n              <DropTarget\n                windowId={WINDOWS.MILKDROP}\n                handleDrop={handlePresetDrop}\n              >\n                {overlay && <PresetOverlay {...size} />}\n                <Fullscreen enabled={fullscreen} onChange={setFullscreen}>\n                  <div onDoubleClick={toggleFullScreenIfEnabled}>\n                    <Visualizer {...size} analyser={analyser} />\n                  </div>\n                </Fullscreen>\n              </DropTarget>\n            </Background>\n          </MilkdropContextMenu>\n        );\n      }}\n    </GenWindow>\n  );\n}\nexport default Milkdrop;\n","import { Fragment } from \"react\";\nimport * as Actions from \"../actionCreators\";\nimport { Hr, Node } from \"./ContextMenu\";\nimport { useActionCreator } from \"../hooks\";\n\nconst PlaybackContextMenu = () => {\n  const previous = useActionCreator(Actions.previous);\n  const play = useActionCreator(Actions.play);\n  const pause = useActionCreator(Actions.pause);\n  const stop = useActionCreator(Actions.stop);\n  const next = useActionCreator(Actions.next);\n  const seekForward = useActionCreator(Actions.seekForward);\n  const seekBackward = useActionCreator(Actions.seekBackward);\n  const nextN = useActionCreator(Actions.nextN);\n  return (\n    <Fragment>\n      <Node label=\"Previous\" hotkey=\"Z\" onClick={previous} />\n      <Node label=\"Play\" hotkey=\"X\" onClick={play} />\n      <Node label=\"Pause\" hotkey=\"C\" onClick={pause} />\n      <Node label=\"Stop\" hotkey=\"V\" onClick={stop} />\n      <Node label=\"Next\" hotkey=\"B\" onClick={next} />\n      <Hr />\n      {/*\n    <Node label=\"Stop w/ fadeout\" hotkey=\"Shift+V\" />\n    <Node label=\"Stop after current\" hotkey=\"Ctrl+V\" />\n    */}\n      <Node\n        label=\"Back 5 seconds\"\n        hotkey=\"Left\"\n        onClick={() => seekBackward(5)}\n      />\n      <Node\n        label=\"Fwd 5 seconds\"\n        hotkey=\"Right\"\n        onClick={() => seekForward(5)}\n      />\n      {/*\n    <Node label=\"Start of list\" hotkey=\"Ctrl+Z\" />\n    */}\n      <Node label=\"10 tracks back\" hotkey=\"Num. 1\" onClick={() => nextN(-10)} />\n      <Node label=\"10 tracks fwd\" hotkey=\"Num. 3\" onClick={() => nextN(10)} />\n      {/*\n    <Hr />\n    <Node label=\"Jump to time\" hotkey=\"Ctrl+J\" />\n    <Node label=\"Jump to file\" hotkey=\"J\" />\n    */}\n    </Fragment>\n  );\n};\n\nexport default PlaybackContextMenu;\n","import * as Actions from \"../actionCreators\";\nimport * as Selectors from \"../selectors\";\nimport { Hr, Node, Parent } from \"./ContextMenu\";\nimport { useActionCreator, useTypedSelector } from \"../hooks\";\n\nconst SkinContextMenu = () => {\n  const loadDefaultSkin = useActionCreator(Actions.loadDefaultSkin);\n  const openSkinFileDialog = useActionCreator(Actions.openSkinFileDialog);\n  const setSkin = useActionCreator(Actions.setSkinFromUrl);\n\n  const availableSkins = useTypedSelector(Selectors.getAvaliableSkins);\n  return (\n    <Parent label=\"Skins\">\n      <Node onClick={openSkinFileDialog} label=\"Load Skin...\" />\n      <Hr />\n      <Node onClick={loadDefaultSkin} label={\"<Base Skin>\"} />\n      {availableSkins.map((skin) => (\n        <Node\n          key={skin.url}\n          onClick={() => setSkin(skin.url)}\n          label={skin.name}\n        />\n      ))}\n    </Parent>\n  );\n};\nexport default SkinContextMenu;\n","import { Hr, Node } from \"./ContextMenu\";\nimport SkinsContextMenu from \"./SkinsContextMenu\";\nimport * as Actions from \"../actionCreators\";\nimport * as Selectors from \"../selectors\";\nimport { TIME_MODE } from \"../constants\";\nimport { useActionCreator, useTypedSelector } from \"../hooks\";\n\nconst OptionsContextMenu = () => {\n  const toggleTimeMode = useActionCreator(Actions.toggleTimeMode);\n  const toggleDoubleSizeMode = useActionCreator(Actions.toggleDoubleSizeMode);\n  const toggleRepeat = useActionCreator(Actions.toggleRepeat);\n  const toggleShuffle = useActionCreator(Actions.toggleShuffle);\n\n  const doubled = useTypedSelector(Selectors.getDoubled);\n  const timeMode = useTypedSelector(Selectors.getTimeMode);\n  const repeat = useTypedSelector(Selectors.getRepeat);\n  const shuffle = useTypedSelector(Selectors.getShuffle);\n  return (\n    <>\n      {/* <Node label=\"Preferences...\" /> */}\n      <SkinsContextMenu />\n      <Hr />\n      <Node\n        label=\"Time elapsed\"\n        hotkey=\"(Ctrl+T toggles)\"\n        onClick={toggleTimeMode}\n        checked={timeMode === TIME_MODE.ELAPSED}\n      />\n      <Node\n        label=\"Time remaining\"\n        hotkey=\"(Ctrl+T toggles)\"\n        onClick={toggleTimeMode}\n        checked={timeMode === TIME_MODE.REMAINING}\n      />\n      {/* <Node label=\"Always On Top\" hotkey=\"Ctrl+A\" /> */}\n      <Node\n        label=\"Double Size\"\n        hotkey=\"Ctrl+D\"\n        onClick={toggleDoubleSizeMode}\n        checked={doubled}\n      />\n      {/* <Node label=\"EasyMove\" hotkey=\"Ctrl+E\" /> */}\n      <Hr />\n      <Node label=\"Repeat\" hotkey=\"R\" onClick={toggleRepeat} checked={repeat} />\n      <Node\n        label=\"Shuffle\"\n        hotkey=\"S\"\n        onClick={toggleShuffle}\n        checked={shuffle}\n      />\n    </>\n  );\n};\nexport default OptionsContextMenu;\n","import { memo, Fragment, useEffect } from \"react\";\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport { LOAD_STYLE, WINDOWS } from \"../../constants\";\nimport { Hr, Node, Parent, LinkNode } from \"../ContextMenu\";\nimport PlaybackContextMenu from \"../PlaybackContextMenu\";\nimport OptionsContextMenu from \"../OptionsContextMenu\";\nimport SkinsContextMenu from \"../SkinsContextMenu\";\nimport { FilePicker, WindowId } from \"../../types\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\n\ninterface Props {\n  filePickers: FilePicker[];\n}\n\nconst MainContextMenu = memo(({ filePickers }: Props) => {\n  const networkConnected = useTypedSelector(Selectors.getNetworkConnected);\n  const genWindows = useTypedSelector(Selectors.getGenWindows);\n\n  const close = useActionCreator(Actions.close);\n  const openMediaFileDialog = useActionCreator(Actions.openMediaFileDialog);\n  const loadMediaFiles = useActionCreator(Actions.loadMediaFiles);\n  const toggleWindow = useActionCreator(Actions.toggleWindow);\n  const menuOpened = useActionCreator(() => ({\n    type: \"MAIN_CONTEXT_MENU_OPENED\",\n  }));\n  const isMilkdropEnabled = useTypedSelector(Selectors.getMilkdropEnabled);\n\n  useEffect(() => {\n    menuOpened();\n  }, [menuOpened]);\n\n  return (\n    <Fragment>\n      <LinkNode\n        href=\"https://webamp.org/about\"\n        target=\"_blank\"\n        label=\"Webamp...\"\n      />\n      <Hr />\n      <Parent label=\"Play\">\n        <Node onClick={openMediaFileDialog} label=\"File...\" hotkey=\"L\" />\n        {filePickers != null &&\n          filePickers.map(\n            (picker, i) =>\n              (networkConnected || !picker.requiresNetwork) && (\n                <Node\n                  key={i}\n                  onClick={async () => {\n                    let files;\n                    try {\n                      files = await picker.filePicker();\n                    } catch (e) {\n                      console.error(\"Error loading from file picker\", e);\n                    }\n                    loadMediaFiles(files || [], LOAD_STYLE.PLAY);\n                  }}\n                  label={picker.contextMenuName}\n                />\n              )\n          )}\n      </Parent>\n      <Hr />\n      {Object.keys(genWindows).map((i) => {\n        if (i === WINDOWS.MILKDROP && !isMilkdropEnabled) {\n          return null;\n        }\n        return (\n          <Node\n            key={i}\n            label={genWindows[i].title}\n            checked={genWindows[i].open}\n            onClick={() => toggleWindow(i as WindowId)}\n            hotkey={genWindows[i].hotkey}\n          />\n        );\n      })}\n      <Hr />\n      <SkinsContextMenu />\n      <Hr />\n      <Parent label=\"Options\">\n        <OptionsContextMenu />\n      </Parent>\n      <Parent label=\"Playback\">\n        <PlaybackContextMenu />\n      </Parent>\n      <Hr />\n      <Node onClick={close} label=\"Exit\" />\n    </Fragment>\n  );\n});\n\nexport default MainContextMenu;\n","import { ReactNode, useCallback, useEffect, useState } from \"react\";\n\nimport * as SnapUtils from \"../snapUtils\";\nimport * as Selectors from \"../selectors\";\nimport * as Actions from \"../actionCreators\";\nimport { WindowInfo, WindowId, Box, Point } from \"../types\";\nimport { useTypedSelector, useActionCreator } from \"../hooks\";\nimport * as Utils from \"../utils\";\n\nconst abuts = (a: Box, b: Box) => {\n  // TODO: This is kinda a hack. They should really be touching, not just within snapping distance.\n  // Also, overlapping should not count.\n  const wouldMoveTo = SnapUtils.snap(a, b);\n  return wouldMoveTo.x !== undefined || wouldMoveTo.y !== undefined;\n};\n\ninterface Props {\n  windows: { [windowId: string]: ReactNode };\n}\n\ntype DraggingState = {\n  moving: WindowInfo[];\n  stationary: WindowInfo[];\n  boundingBox: Box;\n  mouseStart: Point;\n};\n\nfunction useHandleMouseDown(propsWindows: {\n  [windowId: string]: ReactNode;\n}): (\n  key: WindowId,\n  e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>\n) => void {\n  const windowsInfo = useTypedSelector(Selectors.getWindowsInfo);\n  const getWindowHidden = useTypedSelector(Selectors.getWindowHidden);\n  const browserWindowSize = useTypedSelector(Selectors.getBrowserWindowSize);\n  const updateWindowPositions = useActionCreator(Actions.updateWindowPositions);\n\n  const [draggingState, setDraggingState] = useState<DraggingState | null>(\n    null\n  );\n\n  // When the mouse is down, attach a listener to track mouse move events.\n  useEffect(() => {\n    if (draggingState == null) {\n      return;\n    }\n    const { boundingBox, moving, stationary, mouseStart } = draggingState;\n    const handleMouseMove = (ee: MouseEvent | TouchEvent) => {\n      const proposedDiff = {\n        x: Utils.getX(ee) - mouseStart.x,\n        y: Utils.getY(ee) - mouseStart.y,\n      };\n\n      const proposedWindows = moving.map((node) => ({\n        ...node,\n        ...SnapUtils.applyDiff(node, proposedDiff),\n      }));\n\n      const proposedBox = {\n        ...boundingBox,\n        ...SnapUtils.applyDiff(boundingBox, proposedDiff),\n      };\n\n      const snapDiff = SnapUtils.snapDiffManyToMany(\n        proposedWindows,\n        stationary\n      );\n\n      const withinDiff = SnapUtils.snapWithinDiff(\n        proposedBox,\n        browserWindowSize\n      );\n\n      const finalDiff = SnapUtils.applyMultipleDiffs(\n        proposedDiff,\n        snapDiff,\n        withinDiff\n      );\n\n      const windowPositionDiff: { [windowId: string]: Point } = {};\n      moving.forEach((w) => {\n        windowPositionDiff[w.key] = SnapUtils.applyDiff(w, finalDiff);\n      });\n\n      updateWindowPositions(windowPositionDiff, false);\n    };\n\n    function handleMouseUp() {\n      setDraggingState(null);\n    }\n\n    window.addEventListener(\"mouseup\", handleMouseUp);\n    window.addEventListener(\"touchend\", handleMouseUp);\n\n    window.addEventListener(\"mousemove\", handleMouseMove, { passive: false });\n    window.addEventListener(\"touchmove\", handleMouseMove, { passive: false });\n\n    return () => {\n      window.removeEventListener(\"mousemove\", handleMouseMove);\n      window.removeEventListener(\"touchmove\", handleMouseMove);\n      window.removeEventListener(\"mouseup\", handleMouseUp);\n      window.removeEventListener(\"touchend\", handleMouseUp);\n    };\n  }, [browserWindowSize, draggingState, updateWindowPositions]);\n\n  // Mouse down handler\n  return useCallback(\n    (\n      key: WindowId,\n      e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>\n    ) => {\n      if (!(e.target as HTMLElement).classList.contains(\"draggable\")) {\n        return;\n      }\n\n      const x = Utils.getX(e);\n      const y = Utils.getY(e);\n\n      if (getWindowHidden(key)) {\n        // The user may be clicking on full screen Milkdrop.\n        return;\n      }\n\n      const windows = windowsInfo.filter(\n        (w) => propsWindows[w.key] != null && !getWindowHidden(w.key)\n      );\n      const targetNode = windows.find((node) => node.key === key);\n      if (targetNode == null) {\n        throw new Error(`Tried to move a node that does not exist: ${key}`);\n      }\n\n      let movingSet = new Set([targetNode]);\n      // Only the main window brings other windows along.\n      if (key === \"main\") {\n        const findAllConnected = SnapUtils.traceConnection<WindowInfo>(abuts);\n        movingSet = findAllConnected(windows, targetNode);\n      }\n\n      const stationary = windows.filter((w) => !movingSet.has(w));\n      const moving = Array.from(movingSet);\n\n      const mouseStart = { x, y };\n\n      const boundingBox = SnapUtils.boundingBox(moving);\n      setDraggingState({ boundingBox, moving, stationary, mouseStart });\n    },\n    [getWindowHidden, propsWindows, windowsInfo]\n  );\n}\n\nexport default function WindowManager({ windows: propsWindows }: Props) {\n  const windowsInfo = useTypedSelector(Selectors.getWindowsInfo);\n  const setFocusedWindow = useActionCreator(Actions.setFocusedWindow);\n  const handleMouseDown = useHandleMouseDown(propsWindows);\n\n  const windows = windowsInfo.filter((w) => propsWindows[w.key]);\n\n  const onBlur = useCallback(\n    // I give up on trying to type things with `relatedTarget`.\n    (e: any) => {\n      const { currentTarget, relatedTarget } = e;\n      if (\n        currentTarget === relatedTarget ||\n        currentTarget.contains(relatedTarget)\n      ) {\n        return;\n      }\n      setFocusedWindow(null);\n    },\n    [setFocusedWindow]\n  );\n\n  return (\n    <>\n      {windows.map((w) => (\n        <div\n          key={w.key}\n          onBlur={onBlur}\n          onMouseDown={(e: React.MouseEvent<HTMLDivElement>) => {\n            handleMouseDown(w.key, e);\n          }}\n          onTouchStart={(e: React.TouchEvent<HTMLDivElement>) => {\n            handleMouseDown(w.key, e);\n          }}\n          style={{\n            position: \"absolute\",\n            top: 0,\n            left: 0,\n            transform: `translate(${w.x}px, ${w.y}px)`,\n            touchAction: \"none\",\n          }}\n        >\n          {propsWindows[w.key]}\n        </div>\n      ))}\n    </>\n  );\n}\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = basePropertyOf;\n","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n  // Latin-1 Supplement block.\n  '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n  '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n  '\\xc7': 'C',  '\\xe7': 'c',\n  '\\xd0': 'D',  '\\xf0': 'd',\n  '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n  '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n  '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n  '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n  '\\xd1': 'N',  '\\xf1': 'n',\n  '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n  '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n  '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n  '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n  '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n  '\\xc6': 'Ae', '\\xe6': 'ae',\n  '\\xde': 'Th', '\\xfe': 'th',\n  '\\xdf': 'ss',\n  // Latin Extended-A block.\n  '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n  '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n  '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n  '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n  '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n  '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n  '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n  '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n  '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n  '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n  '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n  '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n  '\\u0134': 'J',  '\\u0135': 'j',\n  '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n  '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n  '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n  '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n  '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n  '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n  '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n  '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n  '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n  '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n  '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n  '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n  '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n  '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n  '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n  '\\u0174': 'W',  '\\u0175': 'w',\n  '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n  '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n  '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n  '\\u0132': 'IJ', '\\u0133': 'ij',\n  '\\u0152': 'Oe', '\\u0153': 'oe',\n  '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nmodule.exports = deburrLetter;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * Checks if `value` is classified as an `Array` object.\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 array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\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 nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n    arrayMap = require('./_arrayMap'),\n    isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nmodule.exports = arrayMap;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var deburrLetter = require('./_deburrLetter'),\n    toString = require('./toString');\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n  string = toString(string);\n  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nmodule.exports = deburr;\n","import * as React from \"react\";\nimport deburr from \"lodash/deburr\";\n\ninterface Props extends React.HTMLAttributes<HTMLSpanElement> {\n  children: string | number;\n  className?: string;\n}\n\nexport const characterClassName = (char: string | number) =>\n  `character-${deburr(char.toString()).toLowerCase().charCodeAt(0)}`;\n\nconst Character = React.memo(\n  ({ children: char, className, ...passThrough }: Props) => {\n    return (\n      <span\n        {...passThrough}\n        className={`${className || \"\"} character ${characterClassName(char)}`}\n      >\n        {char}\n      </span>\n    );\n  }\n);\n\nexport default Character;\n","import { Fragment } from \"react\";\nimport classnames from \"classnames\";\nimport { getTimeObj } from \"../utils\";\nimport { TIME_MODE, MEDIA_STATUS } from \"../constants\";\nimport * as Actions from \"../actionCreators\";\nimport Character from \"./Character\";\nimport * as Selectors from \"../selectors\";\n\nimport { useTypedSelector, useActionCreator } from \"../hooks\";\n\n// Sigh. When the display is blinking (say when it's paused) we need to\n// alternate between the actual character and the space character. Not\n// Possible to do that in pure CSS with the background being dynamically generated.\n// All \"space\" characters is also how Winamp renders no content.\nconst Background = () => (\n  <Fragment>\n    {[1, 7, 12, 20, 25].map((left, i) => (\n      <Character\n        style={{ left }}\n        key={i}\n        className=\"background-character\"\n        children=\" \"\n      />\n    ))}\n  </Fragment>\n);\n\nconst MiniTime = () => {\n  const status = useTypedSelector(Selectors.getMediaStatus);\n  const duration = useTypedSelector(Selectors.getDuration);\n  const timeElapsed = useTypedSelector(Selectors.getTimeElapsed);\n  const timeMode = useTypedSelector(Selectors.getTimeMode);\n\n  const toggle = useActionCreator(Actions.toggleTimeMode);\n  let seconds = null;\n  // TODO: Clean this up: If stopped, just render the background, rather than\n  // rendering spaces twice.\n  if (status !== MEDIA_STATUS.STOPPED && duration != null) {\n    seconds =\n      timeMode === TIME_MODE.ELAPSED ? timeElapsed : duration - timeElapsed;\n  }\n\n  const timeObj = getTimeObj(seconds);\n  const showMinus =\n    timeMode === TIME_MODE.REMAINING && status !== MEDIA_STATUS.STOPPED;\n  return (\n    <div\n      onClick={toggle}\n      className={classnames(\"mini-time\", \"countdown\", {\n        blinking: status === MEDIA_STATUS.PAUSED,\n      })}\n    >\n      <Background />\n      <Character style={{ left: 1 }}>{showMinus ? \"-\" : \" \"}</Character>\n      <Character style={{ left: 7 }}>{timeObj.minutesFirstDigit}</Character>\n      <Character style={{ left: 12 }}>{timeObj.minutesSecondDigit}</Character>\n      <Character style={{ left: 20 }}>{timeObj.secondsFirstDigit}</Character>\n      <Character style={{ left: 25 }}>{timeObj.secondsSecondDigit}</Character>\n    </div>\n  );\n};\n\nexport default MiniTime;\n","import { useState } from \"react\";\nimport classnames from \"classnames\";\nimport WinampButton from \"./WinampButton\";\n\ninterface Props extends React.HTMLAttributes<HTMLDivElement> {\n  className?: string;\n  onPointerDown?: (e: React.PointerEvent<HTMLDivElement>) => void;\n}\n\n// Winamp has a strange behavior for the buttons at the top of the main window.\n// It shows through to the main background sprite until the first time that it's\n// clicked, and then it shows the dedicated undepressed sprite thereafter.\n// This component is an abstraction that tracks if a div has ever been clicked.\n// Look in `skinSelectors` for CSS selectors that look like `#some-id.clicked`\n// for examples of this functionality in use.\nfunction ClickedDiv(props: Props) {\n  const [clicked, setClicked] = useState(false);\n  function handlePointerDown(e: React.PointerEvent<HTMLDivElement>) {\n    setClicked(true);\n    if (props.onPointerDown) {\n      props.onPointerDown(e);\n    }\n  }\n  return (\n    <WinampButton\n      {...props}\n      className={classnames(props.className, { clicked })}\n      onPointerDown={handlePointerDown}\n    />\n  );\n}\n\nexport default ClickedDiv;\n","import { useState, useRef, useEffect, useMemo } from \"react\";\nimport ContextMenu from \"./ContextMenu\";\n\ninterface Props extends React.HTMLAttributes<HTMLDivElement> {\n  renderMenu: () => React.ReactNode;\n  top?: boolean;\n  bottom?: boolean;\n}\n\nfunction getNodeOffset(node: HTMLDivElement | null) {\n  if (node == null) {\n    return { top: 0, left: 0 };\n  }\n\n  const rect = node.getBoundingClientRect();\n  const scrollLeft = window.pageXOffset || document.documentElement!.scrollLeft;\n  const scrollTop = window.pageYOffset || document.documentElement!.scrollTop;\n  return { top: rect.top + scrollTop, left: rect.left + scrollLeft };\n}\n\n// Trigger a context menu relative to the child element when the user\n// left-clicks on the child.\n//\n// For a component that triggers relative to the user's cursor on right-click\n// see `<ContextMenuWrapper />`.\nfunction ContextMenuTarget(props: Props) {\n  const handleNode = useRef<HTMLDivElement>(null);\n  const [selected, setSelected] = useState(false);\n  useEffect(() => {\n    if (!selected) {\n      return;\n    }\n    function handleGlobalClick(e: MouseEvent) {\n      if (\n        selected &&\n        // Typescript does not believe that these click events are always fired on DOM nodes.\n        e.target instanceof Element &&\n        selected &&\n        // Not sure how, but it's possible for this to get called when handleNode is null/undefined.\n        // https://sentry.io/share/issue/2066cd79f21e4f279791319f4d2ea35d/\n        handleNode.current &&\n        !handleNode.current.contains(e.target!)\n      ) {\n        setSelected(false);\n      }\n    }\n    document.addEventListener(\"click\", handleGlobalClick);\n    return () => {\n      document.removeEventListener(\"click\", handleGlobalClick);\n    };\n  }, [selected]);\n\n  const offset = useMemo(() => {\n    return selected\n      ? getNodeOffset(handleNode.current)\n      : // Kinda awkward. This is a nonsense return value since we only use\n        //this value when we are selected.\n        { top: 0, left: 0 };\n  }, [selected]);\n\n  const { renderMenu, children, top, bottom, ...passThroughProps } = props;\n  return (\n    <div {...passThroughProps}>\n      <div\n        className=\"handle\"\n        style={{ width: \"100%\", height: \"100%\" }}\n        ref={handleNode}\n        onClick={() => setSelected(!selected)}\n      >\n        {children}\n      </div>\n      <ContextMenu\n        selected={selected}\n        offsetTop={offset.top}\n        offsetLeft={offset.left}\n        top={top}\n        bottom={bottom}\n      >\n        {renderMenu()}\n      </ContextMenu>\n    </div>\n  );\n}\n\nexport default ContextMenuTarget;\n","// The Web Audio API's FFT is bad, so this exists now!\n// Taken from https://github.com/WACUP/vis_classic/tree/master/FFTNullsoft\n\nexport class FFT {\n  private bitrevtable: number[];\n  private envelope: Float32Array;\n  private equalize: Float32Array;\n  private temp1: Float32Array;\n  private temp2: Float32Array;\n  private cossintable: Float32Array[];\n\n  // Constants\n  private static readonly TWO_PI = 6.2831853; // 2 * Math.PI\n  private static readonly HALF_PI = 1.5707963268; // Math.PI / 2\n\n  constructor() {\n    // Assuming these are your hardcoded values:\n    const samplesIn = 1024; // hardcoded value\n    const samplesOut = 512; // hardcoded value\n    const bEqualize = true; // hardcoded value\n    const envelopePower = 1.0; // hardcoded value\n    const mode = false; // hardcoded value\n\n    const NFREQ = samplesOut * 2;\n\n    // Initialize the tables and arrays with hardcoded values\n    this.bitrevtable = this.initBitRevTable(NFREQ);\n    this.cossintable = this.initCosSinTable(NFREQ);\n\n    this.envelope = this.initEnvelopeTable(samplesIn, envelopePower);\n    this.equalize = this.initEqualizeTable(NFREQ, mode);\n\n    this.temp1 = new Float32Array(NFREQ);\n    this.temp2 = new Float32Array(NFREQ);\n  }\n\n  private initEqualizeTable(NFREQ: number, mode: boolean): Float32Array {\n    const equalize = new Float32Array(NFREQ / 2);\n    let bias = 0.04; // FFT.INITIAL_BIAS\n\n    for (let i = 0; i < NFREQ / 2; i++) {\n      const invHalfNfreq = (9.0 - bias) / (NFREQ / 2);\n      equalize[i] = Math.log10(1.0 + bias + (i + 1) * invHalfNfreq);\n      bias /= 1.0025; // FFT.BIAS_DECAY_RATE\n    }\n\n    return equalize;\n  }\n\n  private initEnvelopeTable(samplesIn: number, power: number): Float32Array {\n    const mult = (1.0 / samplesIn) * FFT.TWO_PI;\n    const envelope = new Float32Array(samplesIn);\n\n    for (let i = 0; i < samplesIn; i++) {\n      envelope[i] = Math.pow(\n        0.5 + 0.5 * Math.sin(i * mult - FFT.HALF_PI),\n        power\n      );\n    }\n\n    return envelope;\n  }\n\n  private initBitRevTable(NFREQ: number): number[] {\n    const bitrevtable = new Array(NFREQ);\n\n    for (let i = 0; i < NFREQ; i++) {\n      bitrevtable[i] = i;\n    }\n\n    for (let i = 0, j = 0; i < NFREQ; i++) {\n      if (j > i) {\n        const temp = bitrevtable[i];\n        bitrevtable[i] = bitrevtable[j];\n        bitrevtable[j] = temp;\n      }\n\n      let m = NFREQ >> 1;\n      while (m >= 1 && j >= m) {\n        j -= m;\n        m >>= 1;\n      }\n\n      j += m;\n    }\n\n    return bitrevtable;\n  }\n\n  private initCosSinTable(NFREQ: number): Float32Array[] {\n    const cossintable: Float32Array[] = [];\n    let dftsize = 2;\n\n    while (dftsize <= NFREQ) {\n      const theta = (-2.0 * Math.PI) / dftsize;\n      cossintable.push(new Float32Array([Math.cos(theta), Math.sin(theta)]));\n      dftsize <<= 1;\n    }\n\n    return cossintable;\n  }\n\n  public timeToFrequencyDomain(\n    inWavedata: Float32Array,\n    outSpectraldata: Float32Array\n  ): void {\n    if (!this.temp1 || !this.temp2 || !this.cossintable) return;\n    // Converts time-domain samples from inWavedata[]\n    //   into frequency-domain samples in outSpectraldata[].\n    // The array lengths are the two parameters to Init().\n\n    // The last sample of the output data will represent the frequency\n    //   that is 1/4th of the input sampling rate.  For example,\n    //   if the input wave data is sampled at 44,100 Hz, then the last\n    //   sample of the spectral data output will represent the frequency\n    //   11,025 Hz.  The first sample will be 0 Hz; the frequencies of\n    //   the rest of the samples vary linearly in between.\n    // Note that since human hearing is limited to the range 200 - 20,000\n    //   Hz.  200 is a low bass hum; 20,000 is an ear-piercing high shriek.\n    // Each time the frequency doubles, that sounds like going up an octave.\n    //   That means that the difference between 200 and 300 Hz is FAR more\n    //   than the difference between 5000 and 5100, for example!\n    // So, when trying to analyze bass, you'll want to look at (probably)\n    //   the 200-800 Hz range; whereas for treble, you'll want the 1,400 -\n    //   11,025 Hz range.\n    // If you want to get 3 bands, try it this way:\n    //   a) 11,025 / 200 = 55.125\n    //   b) to get the number of octaves between 200 and 11,025 Hz, solve for n:\n    //          2^n = 55.125\n    //          n = log 55.125 / log 2\n    //          n = 5.785\n    //   c) so each band should represent 5.785/3 = 1.928 octaves; the ranges are:\n    //          1) 200 - 200*2^1.928                    or  200  - 761   Hz\n    //          2) 200*2^1.928 - 200*2^(1.928*2)        or  761  - 2897  Hz\n    //          3) 200*2^(1.928*2) - 200*2^(1.928*3)    or  2897 - 11025 Hz\n\n    // A simple sine-wave-based envelope is convolved with the waveform\n    //   data before doing the FFT, to emeliorate the bad frequency response\n    //   of a square (i.e. nonexistent) filter.\n\n    // You might want to slightly damp (blur) the input if your signal isn't\n    //   of a very high quality, to reduce high-frequency noise that would\n    //   otherwise show up in the output.\n\n    // code should be smart enough to call Init before this function\n    //if (!bitrevtable) return;\n    //if (!temp1) return;\n    //if (!temp2) return;\n    //if (!cossintable) return;\n\n    // 1. set up input to the fft\n    for (let i = 0; i < this.temp1.length; i++) {\n      const idx = this.bitrevtable[i];\n      if (idx < inWavedata.length) {\n        this.temp1[i] =\n          inWavedata[idx] * (this.envelope ? this.envelope[idx] : 1);\n      } else {\n        this.temp1[i] = 0;\n      }\n    }\n    this.temp2.fill(0);\n\n    // 2. Perform FFT\n    const real = this.temp1;\n    const imag = this.temp2;\n    let dftsize = 2;\n    let t = 0;\n\n    while (dftsize <= this.temp1.length) {\n      const wpr = this.cossintable[t][0];\n      const wpi = this.cossintable[t][1];\n      let wr = 1.0;\n      let wi = 0.0;\n      const hdftsize = dftsize >> 1;\n\n      for (let m = 0; m < hdftsize; m += 1) {\n        for (let i = m; i < this.temp1.length; i += dftsize) {\n          const j = i + hdftsize;\n          const tempr = wr * real[j] - wi * imag[j];\n          const tempi = wr * imag[j] + wi * real[j];\n          real[j] = real[i] - tempr;\n          imag[j] = imag[i] - tempi;\n          real[i] += tempr;\n          imag[i] += tempi;\n        }\n\n        const wtemp = wr;\n        wr = wr * wpr - wi * wpi;\n        wi = wi * wpr + wtemp * wpi;\n      }\n\n      dftsize <<= 1;\n      ++t;\n    }\n\n    // 3. take the magnitude & equalize it (on a log10 scale) for output\n    for (let i = 0; i < outSpectraldata.length; i++) {\n      outSpectraldata[i] =\n        Math.sqrt(real[i] * real[i] + imag[i] * imag[i]) *\n        (this.equalize ? this.equalize[i] : 1);\n    }\n  }\n}\n","import { FFT } from \"./FFTNullsoft\";\n\nexport interface Vis {\n  canvas: HTMLCanvasElement;\n  colors: string[];\n  analyser?: AnalyserNode;\n  oscStyle?: \"dots\" | \"solid\" | \"lines\";\n  bandwidth?: \"wide\" | \"thin\";\n  coloring?: \"fire\" | \"line\" | \"normal\";\n  peaks?: boolean;\n  saFalloff?: \"slower\" | \"slow\" | \"moderate\" | \"fast\" | \"faster\";\n  saPeakFalloff?: \"slower\" | \"slow\" | \"moderate\" | \"fast\" | \"faster\";\n  sa?: \"analyzer\" | \"oscilloscope\" | \"none\";\n  renderHeight: number;\n  smallVis?: boolean;\n  pixelDensity?: number;\n  doubled?: boolean;\n  isMWOpen?: boolean;\n}\n\n/**\n * Base class of Visualizer (animation frame renderer engine)\n */\nabstract class VisPaintHandler {\n  _vis: Vis;\n  _ctx: CanvasRenderingContext2D | null;\n\n  constructor(vis: Vis) {\n    this._vis = vis;\n    this._ctx = vis.canvas!.getContext(\"2d\");\n  }\n\n  /**\n   * Attempt to build cached bitmaps for later use while rendering a frame.\n   * Purpose: fast rendering in animation loop\n   */\n  prepare() {}\n\n  /**\n   * Called once per frame rendering\n   */\n  paintFrame() {}\n\n  /**\n   * Attempt to cleanup cached bitmaps\n   */\n  dispose() {}\n}\n\n/**\n * Feeds audio data to the FFT.\n * @param analyser The AnalyserNode used to get the audio data.\n * @param fft The FFTNullsoft instance from the PaintHandler.\n */\nfunction processFFT(\n  analyser: AnalyserNode,\n  fft: FFT,\n  inWaveData: Float32Array,\n  outSpectralData: Float32Array\n): void {\n  const dataArray = new Uint8Array(1024);\n\n  analyser.getByteTimeDomainData(dataArray);\n  for (let i = 0; i < dataArray.length; i++) {\n    inWaveData[i] = (dataArray[i] - 128) / 24;\n  }\n  fft.timeToFrequencyDomain(inWaveData, outSpectralData);\n}\n\n//? =============================== BAR PAINTER ===============================\ntype PaintFrameFunction = () => void;\ntype PaintBarFunction = (\n  ctx: CanvasRenderingContext2D,\n  x1: number,\n  x2: number,\n  barHeight: number,\n  peakHeight: number\n) => void;\n\nexport class BarPaintHandler extends VisPaintHandler {\n  private saPeaks: Int16Array;\n  private saData2: Float32Array;\n  private saData: Int16Array;\n  private saFalloff: Float32Array;\n  private sample: Float32Array;\n  private barPeak: Int16Array;\n  private chunk: number;\n  private uVar12: number;\n  private falloff: number;\n  private peakFalloff: number;\n  private pushDown: number;\n\n  private inWaveData = new Float32Array(1024);\n  private outSpectralData = new Float32Array(512);\n\n  _analyser: AnalyserNode;\n  _fft: FFT;\n  _color: string = \"rgb(255,255,255)\";\n  _colorPeak: string = \"rgb(255,255,255)\";\n  // Off-screen canvas for pre-rendering a single bar gradient\n  _bar: HTMLCanvasElement = document.createElement(\"canvas\");\n  _peak: HTMLCanvasElement = document.createElement(\"canvas\");\n  _16h: HTMLCanvasElement = document.createElement(\"canvas\"); // non-stretched\n  _bufferLength: number;\n  _dataArray: Uint8Array;\n  colorssmall: string[];\n  colorssmall2: string[];\n  _renderHeight: number;\n  _smallVis: boolean;\n  _pixelDensity: number;\n  _doubled: boolean;\n  _isMWOpen: boolean;\n  paintBar: PaintBarFunction;\n  paintFrame: PaintFrameFunction;\n\n  constructor(vis: Vis) {\n    super(vis);\n    this._analyser = this._vis.analyser!;\n    this._fft = new FFT();\n    this._bufferLength = this._analyser.frequencyBinCount;\n    this._dataArray = new Uint8Array(this._bufferLength);\n\n    this._renderHeight = vis.renderHeight!;\n    this._smallVis = vis.smallVis!;\n    this._pixelDensity = vis.pixelDensity!;\n    this._doubled = vis.doubled!;\n    this._isMWOpen = vis.isMWOpen!;\n\n    this.colorssmall = [\n      vis.colors[17],\n      vis.colors[14],\n      vis.colors[11],\n      vis.colors[8],\n      vis.colors[4],\n    ];\n    this.colorssmall2 = [\n      vis.colors[17],\n      vis.colors[16],\n      vis.colors[14],\n      vis.colors[13],\n      vis.colors[11],\n      vis.colors[10],\n      vis.colors[8],\n      vis.colors[7],\n      vis.colors[5],\n      vis.colors[4],\n    ];\n\n    this._16h.width = 1;\n    this._16h.height = 16;\n    this._16h.setAttribute(\"width\", \"75\");\n    this._16h.setAttribute(\"height\", \"16\");\n\n    // draws the analyzer and handles changing the bandwidth correctly\n    this.paintFrame = this.paintAnalyzer.bind(this);\n\n    this.saPeaks = new Int16Array(76).fill(0);\n    this.saData2 = new Float32Array(76).fill(0);\n    this.saData = new Int16Array(76).fill(0);\n    this.saFalloff = new Float32Array(76).fill(0);\n    this.sample = new Float32Array(76).fill(0);\n    this.barPeak = new Int16Array(76).fill(0); // Needs to be specified as Int16 else the peaks don't behave as they should\n    this.chunk = 0;\n    this.uVar12 = 0;\n    this.pushDown = 0;\n\n    switch (this._vis.coloring) {\n      case \"fire\":\n        this.paintBar = this.paintBarFire.bind(this);\n        break;\n      case \"line\":\n        this.paintBar = this.paintBarLine.bind(this);\n        break;\n      default:\n        this.paintBar = this.paintBarNormal.bind(this);\n        break;\n    }\n\n    switch (this._vis.saFalloff) {\n      case \"slower\":\n        this.falloff = 3;\n        break;\n      case \"slow\":\n        this.falloff = 6;\n        break;\n      case \"moderate\":\n        this.falloff = 12;\n        break;\n      case \"fast\":\n        this.falloff = 16;\n        break;\n      case \"faster\":\n        this.falloff = 32;\n        break;\n      default:\n        this.falloff = 12;\n        break;\n    }\n\n    switch (this._vis.saPeakFalloff) {\n      case \"slower\":\n        this.peakFalloff = 1.05;\n        break;\n      case \"slow\":\n        this.peakFalloff = 1.1;\n        break;\n      case \"moderate\":\n        this.peakFalloff = 1.2;\n        break;\n      case \"fast\":\n        this.peakFalloff = 1.4;\n        break;\n      case \"faster\":\n        this.peakFalloff = 1.6;\n        break;\n      default:\n        this.peakFalloff = 1.1;\n        break;\n    }\n  }\n\n  prepare() {\n    const vis = this._vis;\n\n    //? paint peak\n    this._peak.height = 1;\n    this._peak.width = 1;\n    let ctx = this._peak.getContext(\"2d\")!;\n    ctx.fillStyle = vis.colors[23];\n    ctx.fillRect(0, 0, 1, 1);\n\n    if (this._vis.smallVis) {\n      this.pushDown = 0;\n    } else if (this._vis.doubled && !this._vis.isMWOpen) {\n      this.pushDown = 2;\n    } else if (this._vis.doubled) {\n      this.pushDown = 0;\n    } else {\n      this.pushDown = 2;\n    }\n\n    //? paint bar\n    this._bar.height = 16;\n    this._bar.width = 1;\n    this._bar.setAttribute(\"width\", \"1\");\n    this._bar.setAttribute(\"height\", \"16\");\n    ctx = this._bar.getContext(\"2d\")!;\n    for (let y = 0; y < 16; y++) {\n      if (this._vis.pixelDensity === 2 && this._vis.smallVis) {\n        ctx.fillStyle = this.colorssmall2[-y + 9];\n      } else {\n        ctx.fillStyle = this._vis.smallVis\n          ? this.colorssmall[-y + 4]\n          : vis.colors[2 - this.pushDown - -y];\n      }\n      ctx.fillRect(0, y, 1, y + 1);\n    }\n  }\n\n  /**\n   * ⬜⬜⬜ ⬜⬜⬜\n   * 🟧🟧🟧\n   * 🟫🟫🟫 🟧🟧🟧\n   * 🟫🟫🟫 🟫🟫🟫\n   * 🟫🟫🟫 🟫🟫🟫 ⬜⬜⬜\n   * 🟫🟫🟫 🟫🟫🟫 🟧🟧🟧\n   * 🟫🟫🟫 🟫🟫🟫 🟫🟫🟫\n   * 1 bar = multiple pixels\n   */\n  /**\n   * ⬜⬜\n   * 🟧\n   * 🟫🟧\n   * 🟫🟫⬜⬜\n   * 🟫🟫🟧\n   * 🟫🟫🟫🟧⬜\n   * 🟫🟫🟫🟫🟧\n   * drawing 1pixel width bars\n   */\n  paintAnalyzer() {\n    if (!this._ctx) return;\n    const ctx = this._ctx;\n    const w = ctx.canvas.width;\n    const h = ctx.canvas.height;\n    ctx.fillStyle = this._color;\n\n    const maxFreqIndex = 512;\n    const logMaxFreqIndex = Math.log10(maxFreqIndex);\n    const logMinFreqIndex = 0;\n\n    let targetSize: number;\n    let maxHeight: number;\n    let maxWidth: number;\n    if (this._vis.pixelDensity === 2) {\n      targetSize = 75;\n      maxHeight = 10;\n    } else {\n      targetSize = this._vis.smallVis ? 40 : 75;\n      maxHeight = this._vis.smallVis ? 5 : 15;\n    }\n\n    processFFT(\n      this._analyser,\n      this._fft,\n      this.inWaveData,\n      this.outSpectralData\n    );\n\n    if (this._vis.smallVis) {\n      if (this._vis.pixelDensity === 2) {\n        maxWidth = 75; // this is not 37*2, but if this was 74, we'd be missing a pixel\n        // someone here at Nullsoft screwed up...? or thought 74 didn't look good, I don't know.\n      } else {\n        maxWidth = 37;\n      }\n    } else {\n      maxWidth = 75;\n    }\n\n    // This is to roughly emulate the Analyzer in more modern versions of Winamp.\n    // 2.x and early 5.x versions had a completely linear(?) FFT, if so desired the\n    // scale variable can be set to 0.0\n\n    // This factor controls the scaling from linear to logarithmic.\n    // scale = 0.0 -> fully linear scaling\n    // scale = 1.0 -> fully logarithmic scaling\n    const scale = 0.91; // Adjust this value between 0.0 and 1.0\n    for (let x = 0; x < targetSize; x++) {\n      // Linear interpolation between linear and log scaling\n      const linearIndex = (x / (targetSize - 1)) * (maxFreqIndex - 1);\n      const logScaledIndex =\n        logMinFreqIndex +\n        ((logMaxFreqIndex - logMinFreqIndex) * x) / (targetSize - 1);\n      const logIndex = Math.pow(10, logScaledIndex);\n\n      // Interpolating between linear and logarithmic scaling\n      const scaledIndex = (1.0 - scale) * linearIndex + scale * logIndex;\n\n      let index1 = Math.floor(scaledIndex);\n      let index2 = Math.ceil(scaledIndex);\n\n      if (index1 >= maxFreqIndex) {\n        index1 = maxFreqIndex - 1;\n      }\n      if (index2 >= maxFreqIndex) {\n        index2 = maxFreqIndex - 1;\n      }\n\n      if (index1 === index2) {\n        this.sample[x] = this.outSpectralData[index1];\n      } else {\n        const frac2 = scaledIndex - index1;\n        const frac1 = 1.0 - frac2;\n        this.sample[x] =\n          frac1 * this.outSpectralData[index1] +\n          frac2 * this.outSpectralData[index2];\n      }\n    }\n\n    for (let x = 0; x < maxWidth; x++) {\n      // Based on research of looking at Winamp 5.666 and 2.63 executables\n\n      // if our bandwidth is \"wide\", chunk every 5 instances of the bars,\n      // add them together and display them\n      if (this._vis.bandwidth === \"wide\") {\n        this.chunk = this.chunk = x & 0xfffffffc;\n        this.uVar12 =\n          (this.sample[this.chunk + 3] +\n            this.sample[this.chunk + 2] +\n            this.sample[this.chunk + 1] +\n            this.sample[this.chunk]) /\n          4;\n        this.saData[x] = this.uVar12;\n      } else {\n        this.chunk = 0;\n        this.saData[x] = this.sample[x];\n      }\n\n      if (this.saData[x] >= maxHeight) {\n        this.saData[x] = maxHeight;\n      }\n\n      // prevents saPeaks going out of bounds when switching to windowShade mode\n      if (this.saPeaks[x] >= maxHeight * 256) {\n        this.saPeaks[x] = maxHeight * 256;\n      }\n\n      this.saFalloff[x] -= this.falloff / 16.0;\n      // Possible bar fall off values are\n      // 3, 6, 12, 16, 32\n      // Should there ever be some form of config options,\n      // these should be used\n      // 12 is the default of a fresh new Winamp installation\n\n      if (this.saFalloff[x] <= this.saData[x]) {\n        this.saFalloff[x] = this.saData[x];\n      }\n\n      if (this.saPeaks[x] <= Math.round(this.saFalloff[x] * 256)) {\n        this.saPeaks[x] = this.saFalloff[x] * 256;\n        this.saData2[x] = 3.0;\n      }\n\n      this.barPeak[x] = this.saPeaks[x] / 256;\n\n      this.saPeaks[x] -= Math.round(this.saData2[x]);\n      this.saData2[x] *= this.peakFalloff;\n      // Possible peak fall off values are\n      // 1.05f, 1.1f, 1.2f, 1.4f, 1.6f\n      // 1.1f is the default of a fresh new Winamp installation\n      if (this.saPeaks[x] <= 0) {\n        this.saPeaks[x] = 0;\n      }\n\n      if (this._vis.smallVis) {\n        // SORRY NOTHING\n        // ironically enough the peaks do appear at the bottom here\n      } else if (Math.round(this.barPeak[x]) < 1) {\n        this.barPeak[x] = -3; // Push peaks outside the viewable area, this isn't a Modern Skin!\n      }\n\n      // skip rendering if x is 4\n      if (!(x === this.chunk + 3 && this._vis.bandwidth === \"wide\")) {\n        this.paintBar(\n          ctx,\n          x,\n          x,\n          Math.round(this.saFalloff[x]) - this.pushDown,\n          this.barPeak[x] + 1 - this.pushDown\n        );\n      }\n    }\n  }\n\n  /**\n   * 🟥\n   * 🟧🟧\n   * 🟨🟨🟨\n   * 🟩🟩🟩🟩\n   */\n  paintBarNormal(\n    ctx: CanvasRenderingContext2D,\n    x: number,\n    x2: number,\n    barHeight: number,\n    peakHeight: number\n  ) {\n    const h = ctx.canvas.height;\n    const y = h - barHeight;\n\n    ctx.drawImage(this._bar, 0, y, 1, h - y, x, y, x2 - x + 1, h - y);\n\n    if (this._vis.peaks) {\n      const peakY = h - peakHeight;\n      ctx.drawImage(this._peak, 0, 0, 1, 1, x, peakY, x2 - x + 1, 1);\n    }\n  }\n\n  /**\n   * 🟥\n   * 🟧🟥\n   * 🟨🟧🟥\n   * 🟩🟨🟧🟥\n   */\n  paintBarFire(\n    ctx: CanvasRenderingContext2D,\n    x: number,\n    x2: number,\n    barHeight: number,\n    peakHeight: number\n  ) {\n    const h = ctx.canvas.height;\n    const y = h - barHeight;\n\n    ctx.drawImage(\n      this._bar,\n      0,\n      0,\n      this._bar.width,\n      h - y,\n      x,\n      y,\n      x2 - x + 1,\n      h - y\n    );\n\n    if (this._vis.peaks) {\n      const peakY = h - peakHeight;\n      ctx.drawImage(this._peak, 0, 0, 1, 1, x, peakY, x2 - x + 1, 1);\n    }\n  }\n\n  /**\n   * 🟥\n   * 🟥🟧\n   * 🟥🟧🟨\n   * 🟥🟧🟨🟩\n   */\n  paintBarLine(\n    ctx: CanvasRenderingContext2D,\n    x: number,\n    x2: number,\n    barHeight: number,\n    peakHeight: number\n  ) {\n    const h = ctx.canvas.height;\n    const y = h - barHeight;\n    // FIXME: Line drawing is currently Fire mode!\n\n    ctx.drawImage(\n      this._bar,\n      0, // sx\n      0, // sy\n      this._bar.width, // sw\n      h - y, // sh\n      x,\n      y, //  dx,dy\n      x2 - x + 1, //dw\n      h - y //dh\n    );\n\n    if (this._vis.peaks) {\n      const peakY = h - peakHeight;\n      ctx.drawImage(this._peak, 0, 0, 1, 1, x, peakY, x2 - x + 1, 1);\n    }\n  }\n}\n\n//? =============================== OSCILLOSCOPE PAINTER ===============================\n\ntype PaintWavFunction = (x: number, y: number) => void;\n\nfunction slice1st(\n  dataArray: Uint8Array,\n  sliceWidth: number,\n  sliceNumber: number\n): number {\n  const start = sliceWidth * sliceNumber;\n  return dataArray[start];\n}\n\nexport class WavePaintHandler extends VisPaintHandler {\n  private pushDown: number;\n\n  _analyser: AnalyserNode;\n  _bufferLength: number;\n  _lastX: number = 0;\n  _lastY: number = 0;\n  _dataArray: Uint8Array;\n  _pixelRatio: number; // 1 or 2\n  // Off-screen canvas for drawing perfect pixel (no blurred lines)\n  _bar: HTMLCanvasElement = document.createElement(\"canvas\");\n  _16h: HTMLCanvasElement = document.createElement(\"canvas\"); // non-stretched\n  paintWav: PaintWavFunction;\n\n  constructor(vis: Vis) {\n    super(vis);\n    this._analyser = this._vis.analyser!;\n    this._bufferLength = this._analyser.fftSize;\n    this._dataArray = new Uint8Array(this._bufferLength);\n\n    this._16h.width = 1;\n    this._16h.height = 16;\n    this._16h.setAttribute(\"width\", \"75\");\n    this._16h.setAttribute(\"height\", \"16\");\n\n    //* see https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio#monitoring_screen_resolution_or_zoom_level_changes\n    this._pixelRatio = window.devicePixelRatio || 1;\n\n    // draws the oscilloscope and handles overly complex operations\n    // in relation to oscilloscope style and main window states\n    this.paintWav = this.paintOscilloscope.bind(this);\n    this.pushDown = 0;\n  }\n\n  prepare() {\n    const vis = this._vis;\n\n    //? paint bar\n    this._bar.width = 1;\n    this._bar.height = 5;\n    this._bar.setAttribute(\"width\", \"1\");\n    this._bar.setAttribute(\"height\", \"5\");\n    const ctx = this._bar.getContext(\"2d\");\n    if (ctx) {\n      for (let y = 0; y < 5; y++) {\n        ctx.fillStyle = vis.colors[18 + y];\n        ctx.fillRect(0, y, 1, y + 1);\n      }\n    }\n\n    // @ts-ignore\n    this._ctx.imageSmoothingEnabled = false;\n    // @ts-ignore\n    this._ctx.mozImageSmoothingEnabled = false;\n    // @ts-ignore\n    this._ctx.webkitImageSmoothingEnabled = false;\n    // @ts-ignore\n    this._ctx.msImageSmoothingEnabled = false;\n  }\n\n  paintFrame() {\n    if (!this._ctx) return;\n    this._analyser.getByteTimeDomainData(this._dataArray);\n    this._dataArray = this._dataArray.slice(0, 576);\n    const bandwidth = this._dataArray.length;\n\n    const width = this._ctx!.canvas.width;\n    const height = this._ctx!.canvas.height;\n\n    // width would technically be correct, but if the main window is\n    // in windowshade mode, it is set to 150, making sliceWidth look\n    // wrong in that mode, concerning the oscilloscope\n    const sliceWidth = Math.floor(bandwidth / 75);\n\n    // Iterate over the width of the canvas in fixed 75 pixels.\n    for (let j = 0; j <= 75; j++) {\n      const amplitude = slice1st(this._dataArray, sliceWidth, j);\n      this.paintWav(j, amplitude);\n    }\n  }\n\n  /**\n   *\n   * @param y 0..5\n   * @returns value in use for coloring stuff in\n   */\n  colorIndex(y: number): number {\n    if (this._vis.smallVis) {\n      return 0;\n    }\n    if (y >= 14) return 4;\n    if (y >= 12) return 3;\n    if (y >= 10) return 2;\n    if (y >= 8) return 1;\n    if (y >= 6) return 0;\n    if (y >= 4) return 1;\n    if (y >= 2) return 2;\n    if (y >= 0) return 3;\n    return 3;\n  }\n\n  paintOscilloscope(x: number, y: number) {\n    // we skip rendering of the oscilloscope if we are in windowShade mode\n    // previously the renderWidth variable in Vis.tsx scaled down the width\n    // of the canvas, but i didn't really like the idea since we squished\n    // down the result of y to fit within 35/75 pixels, winamp doesn't\n    // squish it's audio data down in the x axis, resulting in only\n    // getting a small portion of what we hear, they did it, so do we\n    if (this._vis.smallVis && this._vis.doubled) {\n      if (x >= 75) {\n        // SORRY NOTHING\n        return;\n      }\n    } else if (x >= (this._vis.smallVis ? 38 : 75)) {\n      // SORRY NOTHING\n      return;\n    }\n    // pushes vis down if not double size, winamp does this\n    if (this._vis.smallVis) {\n      this.pushDown = 0;\n    } else if (this._vis.doubled && !this._vis.isMWOpen) {\n      this.pushDown = 2;\n    } else if (this._vis.doubled) {\n      this.pushDown = 0;\n    } else {\n      this.pushDown = 2;\n    }\n\n    // rounds y down to the nearest int\n    // before that even happens, y is scaled down and then doubled again (could've done * 8\n    // but i feel this makes more sense to me)\n    // y is then adjusted downward to be in the center of the scope\n    y = Math.round((y / 16) * 2) - 9;\n\n    // adjusts the center point of y if we are in windowShade mode, and if pixelDensity is 2\n    // where it's adjusted further to give you the fullest view possible in that small window\n    // else we leave y as is\n    let yadjust: number;\n    if (this._vis.pixelDensity === 2) yadjust = 3;\n    else yadjust = 5;\n    y = this._vis.smallVis ? y - yadjust : y;\n\n    // scales down the already scaled down result of y to 0..10 or 0..5, depending on\n    // if pixelDensity returns 2, this serves the purpose of avoiding full sending\n    // y to that really tiny space we have there\n    if (this._vis.smallVis && this._vis.pixelDensity === 2) {\n      y = Math.round(((y + 11) / 16) * 10) - 5;\n    } else if (this._vis.smallVis) {\n      y = Math.round(((y + 11) / 16) * 5) - 2;\n    }\n\n    // clamp y to be within a certain range, here it would be 0..10 if both windowShade and pixelDensity apply\n    // else we clamp y to 0..15 or 0..3, depending on renderHeight\n    if (this._vis.smallVis && this._vis.pixelDensity === 2) {\n      y = y < 0 ? 0 : y > 10 - 1 ? 10 - 1 : y;\n    } else {\n      y =\n        y < 0\n          ? 0\n          : y > this._vis.renderHeight - 1\n          ? this._vis.renderHeight - 1\n          : y;\n    }\n    const v = y;\n    if (x === 0) this._lastY = y;\n\n    let top = y;\n    let bottom = this._lastY;\n    this._lastY = y;\n\n    if (this._vis.oscStyle === \"solid\") {\n      if (this._vis.pixelDensity === 2) {\n        if (y >= (this._vis.smallVis ? 5 : 8)) {\n          top = this._vis.smallVis ? 5 : 8;\n          bottom = y;\n        } else {\n          top = y;\n          bottom = this._vis.smallVis ? 5 : 7;\n        }\n        if (x === 0 && this._vis.smallVis) {\n          // why? i dont know!!\n          top = y;\n          bottom = y;\n        }\n      } else {\n        if (y >= (this._vis.smallVis ? 2 : 8)) {\n          top = this._vis.smallVis ? 2 : 8;\n          bottom = y;\n        } else {\n          top = y;\n          bottom = this._vis.smallVis ? 2 : 7;\n        }\n        if (x === 0 && this._vis.smallVis) {\n          // why? i dont know!!\n          top = y;\n          bottom = y;\n        }\n      }\n    } else if (this._vis.oscStyle === \"dots\") {\n      top = y;\n      bottom = y;\n    } else if (bottom < top) {\n      [bottom, top] = [top, bottom];\n      if (this._vis.smallVis) {\n        // SORRY NOTHING\n        // really just removes the smoother line descending thing that's present in the Main Window\n      } else {\n        top++; //top++, that emulates Winamp's/WACUP's OSC behavior correctly\n      }\n    }\n\n    for (y = top; y <= bottom; y++) {\n      this._ctx!.drawImage(\n        this._bar,\n        0,\n        this.colorIndex(v), // sx,sy\n        1,\n        1, // sw,sh\n        x,\n        y + this.pushDown,\n        1,\n        1 //dw,dh\n      );\n    }\n  }\n}\n\nexport class NoVisualizerHandler extends VisPaintHandler {\n  cleared: boolean = false;\n  prepare() {\n    this.cleared = false;\n  }\n\n  paintFrame() {\n    if (!this._ctx) return;\n    const ctx = this._ctx;\n    this.cleared = true;\n  }\n}\n","import React, { useMemo, useState, useLayoutEffect, useEffect } from \"react\";\n\nimport * as Actions from \"../actionCreators\";\nimport * as Selectors from \"../selectors\";\nimport { useTypedSelector, useActionCreator } from \"../hooks\";\nimport { VISUALIZERS, MEDIA_STATUS } from \"../constants\";\n\nimport {\n  Vis as IVis,\n  BarPaintHandler,\n  WavePaintHandler,\n  NoVisualizerHandler,\n} from \"./VisPainter\";\n\ntype Props = {\n  analyser: AnalyserNode;\n};\n\n// Pre-render the background grid\nfunction preRenderBg(options: {\n  width: number;\n  height: number;\n  bgColor: string;\n  fgColor: string;\n  windowShade: boolean;\n  pixelDensity: number;\n}): HTMLCanvasElement {\n  const { width, height, bgColor, fgColor, windowShade, pixelDensity } =\n    options;\n  // Off-screen canvas for pre-rendering the background\n  const bgCanvas = document.createElement(\"canvas\");\n  bgCanvas.width = width;\n  bgCanvas.height = height;\n  const distance = 2 * pixelDensity;\n\n  const bgCanvasCtx = bgCanvas.getContext(\"2d\");\n  if (bgCanvasCtx == null) {\n    throw new Error(\"Could not construct canvas context\");\n  }\n  bgCanvasCtx.fillStyle = bgColor;\n  bgCanvasCtx.fillRect(0, 0, width, height);\n  if (!windowShade) {\n    bgCanvasCtx.fillStyle = fgColor;\n    for (let x = 0; x < width; x += distance) {\n      for (let y = pixelDensity; y < height; y += distance) {\n        bgCanvasCtx.fillRect(x, y, pixelDensity, pixelDensity);\n      }\n    }\n  }\n  return bgCanvas;\n}\n\nexport default function Vis({ analyser }: Props) {\n  useLayoutEffect(() => {\n    analyser.fftSize = 1024;\n  }, [analyser, analyser.fftSize]);\n\n  const colors = useTypedSelector(Selectors.getSkinColors);\n  const mode = useTypedSelector(Selectors.getVisualizerStyle);\n  const audioStatus = useTypedSelector(Selectors.getMediaStatus);\n  const getWindowShade = useTypedSelector(Selectors.getWindowShade);\n  const getWindowOpen = useTypedSelector(Selectors.getWindowOpen);\n  const isMWOpen = getWindowOpen(\"main\");\n  const doubled = useTypedSelector(Selectors.getDoubled);\n  const toggleVisualizerStyle = useActionCreator(Actions.toggleVisualizerStyle);\n  const windowShade = getWindowShade(\"main\");\n\n  const smallVis = windowShade && isMWOpen;\n  const renderHeight = smallVis ? 5 : 16;\n  const renderWidth = 76;\n  const pixelDensity = doubled && smallVis ? 2 : 1;\n\n  let renderWidthBG: number;\n  if (!isMWOpen) {\n    renderWidthBG = renderWidth;\n  } else if (windowShade) {\n    renderWidthBG = doubled ? renderWidth : 38;\n  } else {\n    renderWidthBG = renderWidth * pixelDensity;\n  }\n\n  const width = renderWidth * pixelDensity;\n  const height = renderHeight * pixelDensity;\n\n  const bgCanvas = useMemo(() => {\n    return preRenderBg({\n      width: renderWidthBG,\n      height,\n      bgColor: colors[0],\n      fgColor: colors[1],\n      windowShade: Boolean(windowShade),\n      pixelDensity,\n    });\n  }, [colors, height, renderWidthBG, windowShade, pixelDensity]);\n\n  const [canvas, setCanvas] = useState<HTMLCanvasElement | null>(null);\n\n  //? painter administration\n  const painter = useMemo(() => {\n    if (!canvas) return null;\n\n    const vis: IVis = {\n      canvas,\n      colors,\n      analyser,\n      oscStyle: \"lines\",\n      bandwidth: \"wide\",\n      coloring: \"normal\",\n      peaks: true,\n      saFalloff: \"moderate\",\n      saPeakFalloff: \"slow\",\n      sa: \"analyzer\", // unused, but hopefully will be used in the future for providing config options\n      renderHeight,\n      smallVis,\n      pixelDensity,\n      doubled,\n      isMWOpen,\n    };\n\n    switch (mode) {\n      case VISUALIZERS.OSCILLOSCOPE:\n        return new WavePaintHandler(vis);\n      case VISUALIZERS.BAR:\n        return new BarPaintHandler(vis);\n      case VISUALIZERS.NONE:\n        return new NoVisualizerHandler(vis);\n      default:\n        return new NoVisualizerHandler(vis);\n    }\n  }, [\n    analyser,\n    canvas,\n    mode,\n    colors,\n    renderHeight,\n    smallVis,\n    pixelDensity,\n    doubled,\n    isMWOpen,\n  ]);\n\n  // reacts to changes in doublesize mode\n  useEffect(() => {\n    if (canvas && painter) {\n      const canvasCtx = canvas.getContext(\"2d\");\n      if (canvasCtx) {\n        painter.prepare();\n        // wipes the canvas clean if playback is paused and doubled is changing\n        if (audioStatus === MEDIA_STATUS.PAUSED) {\n          canvasCtx.clearRect(0, 0, canvas.width, canvas.height);\n        }\n      }\n    }\n    // TODO: Double check expected behavior when pause state changes.\n    // Here we ignore the audioStatus dependency because we don't\n    // want to clear the canvas when the audio is paused.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [doubled, canvas, painter]);\n\n  useEffect(() => {\n    if (canvas == null || painter == null) {\n      return;\n    }\n\n    const canvasCtx = canvas.getContext(\"2d\");\n    if (canvasCtx == null) {\n      return;\n    }\n    canvasCtx.imageSmoothingEnabled = false;\n\n    let animationRequest: number | null = null;\n\n    const loop = () => {\n      canvasCtx.drawImage(bgCanvas, 0, 0);\n      painter.paintFrame();\n      animationRequest = window.requestAnimationFrame(loop);\n    };\n\n    if (audioStatus === MEDIA_STATUS.PLAYING) {\n      if (mode === VISUALIZERS.NONE) {\n        canvasCtx.clearRect(0, 0, renderWidthBG, height);\n      } else {\n        loop();\n      }\n    }\n\n    return () => {\n      if (animationRequest !== null) {\n        window.cancelAnimationFrame(animationRequest);\n      }\n    };\n  }, [audioStatus, canvas, painter, bgCanvas, renderWidthBG, height, mode]);\n\n  if (audioStatus === MEDIA_STATUS.STOPPED) {\n    return null;\n  }\n\n  return (\n    <canvas\n      id=\"visualizer\"\n      ref={setCanvas}\n      style={{ width: renderWidth, height: renderHeight }}\n      width={width}\n      height={height}\n      onClick={toggleVisualizerStyle}\n    />\n  );\n}\n","import { memo } from \"react\";\nimport * as Actions from \"../../actionCreators\";\nimport { useActionCreator } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nconst ActionButtons = memo(() => {\n  const previous = useActionCreator(Actions.previous);\n  const play = useActionCreator(Actions.play);\n  const pause = useActionCreator(Actions.pause);\n  const next = useActionCreator(Actions.next);\n  const stop = useActionCreator(Actions.stop);\n  return (\n    <div className=\"actions\">\n      <WinampButton id=\"previous\" onClick={previous} title=\"Previous Track\" />\n      <WinampButton id=\"play\" onClick={play} title=\"Play\" />\n      <WinampButton id=\"pause\" onClick={pause} title=\"Pause\" />\n      <WinampButton id=\"stop\" onClick={stop} title=\"Stop\" />\n      <WinampButton id=\"next\" onClick={next} title=\"Next Track\" />\n    </div>\n  );\n});\n\nexport default ActionButtons;\n","import * as React from \"react\";\n\nimport * as Actions from \"../actionCreators\";\nimport * as Selectors from \"../selectors\";\nimport { useTypedSelector, useActionCreator } from \"../hooks\";\n\ninterface Props {\n  id?: string;\n  style?: React.CSSProperties;\n  className?: string;\n}\n\nexport default function Balance({ style, className, id }: Props) {\n  const balance = useTypedSelector(Selectors.getBalance);\n  const setBalance = useActionCreator(Actions.setBalance);\n  const setFocus = useActionCreator(Actions.setFocus);\n  const unsetFocus = useActionCreator(Actions.unsetFocus);\n  return (\n    <input\n      id={id}\n      className={className}\n      type=\"range\"\n      min=\"-100\"\n      max=\"100\"\n      step=\"1\"\n      value={balance}\n      style={{ ...style, touchAction: \"none\" }}\n      onChange={(e) => setBalance(Number(e.target.value))}\n      onPointerDown={() => setFocus(\"balance\")}\n      onPointerUp={unsetFocus}\n      title=\"Balance\"\n    />\n  );\n}\n","import { memo } from \"react\";\n\nimport Balance from \"../Balance\";\nimport * as Selectors from \"../../selectors\";\nimport { useTypedSelector } from \"../../hooks\";\n\nexport const offsetFromBalance = (balance: number): number => {\n  const percent = Math.abs(balance) / 100;\n  const sprite = Math.floor(percent * 27);\n  const offset = sprite * 15;\n  return offset;\n};\n\nconst MainBalance = memo(() => {\n  const balance = useTypedSelector(Selectors.getBalance);\n  return (\n    <Balance\n      id=\"balance\"\n      style={{ backgroundPosition: `0 -${offsetFromBalance(balance)}px` }}\n    />\n  );\n});\n\nexport default MainBalance;\n","import { memo } from \"react\";\nimport ClickedDiv from \"../ClickedDiv\";\nimport { useActionCreator } from \"../../hooks\";\n\nimport * as Actions from \"../../actionCreators\";\n\nconst Close = memo(() => {\n  const close = useActionCreator(Actions.close);\n  return <ClickedDiv id=\"close\" onClick={close} title=\"Close\" />;\n});\n\nexport default Close;\n","import { memo } from \"react\";\nimport classnames from \"classnames\";\n\nimport * as Actions from \"../../actionCreators\";\nimport { Action, Thunk } from \"../../types\";\nimport OptionsContextMenu from \"../OptionsContextMenu\";\nimport ContextMenuTarget from \"../ContextMenuTarget\";\nimport { useActionCreator, useTypedSelector } from \"../../hooks\";\nimport * as Selectors from \"../../selectors\";\n\nfunction setFocusDouble(): Action {\n  return Actions.setFocus(\"double\");\n}\n\nfunction mouseUp(): Thunk {\n  return (dispatch) => {\n    dispatch(Actions.toggleDoubleSizeMode());\n    dispatch(Actions.unsetFocus());\n  };\n}\n\nconst ClutterBar = memo(() => {\n  const handleMouseDown = useActionCreator(setFocusDouble);\n  const handleMouseUp = useActionCreator(mouseUp);\n  const doubled = useTypedSelector(Selectors.getDoubled);\n  return (\n    <div id=\"clutter-bar\">\n      <ContextMenuTarget bottom renderMenu={() => <OptionsContextMenu />}>\n        <div id=\"button-o\" />\n      </ContextMenuTarget>\n      <div id=\"button-a\" />\n      <div id=\"button-i\" />\n      <div\n        title={\"Toggle Doublesize Mode\"}\n        id=\"button-d\"\n        className={classnames({ selected: doubled })}\n        onPointerUp={handleMouseUp}\n        onPointerDown={(e) => {\n          e.preventDefault();\n          handleMouseDown();\n        }}\n      />\n      <div id=\"button-v\" />\n    </div>\n  );\n});\n\nexport default ClutterBar;\n","import { memo } from \"react\";\n\nimport * as Actions from \"../../actionCreators\";\nimport { useActionCreator } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nconst Eject = memo(() => {\n  const openMediaFileDialog = useActionCreator(Actions.openMediaFileDialog);\n  return (\n    <WinampButton\n      id=\"eject\"\n      onClick={openMediaFileDialog}\n      title=\"Open File(s)\"\n    />\n  );\n});\n\nexport default Eject;\n","import { memo } from \"react\";\nimport classnames from \"classnames\";\n\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport { useActionCreator, useTypedSelector } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nfunction toggleEqualizer() {\n  return Actions.toggleWindow(\"equalizer\");\n}\n\nconst EqToggleButton = memo(() => {\n  const handleClick = useActionCreator(toggleEqualizer);\n  const windowOpen = useTypedSelector(Selectors.getWindowOpen)(\"equalizer\");\n  return (\n    <WinampButton\n      id=\"equalizer-button\"\n      className={classnames({ selected: windowOpen })}\n      onClick={handleClick}\n      title=\"Toggle Graphical Equalizer\"\n    />\n  );\n});\n\nexport default EqToggleButton;\n","import { memo } from \"react\";\nimport classnames from \"classnames\";\n\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nfunction togglePlaylist() {\n  return Actions.toggleWindow(\"playlist\");\n}\n\nconst PlaylistToggleButton = memo(() => {\n  const selected = useTypedSelector(Selectors.getWindowOpen)(\"playlist\");\n  const handleClick = useActionCreator(togglePlaylist);\n  return (\n    <WinampButton\n      id=\"playlist-button\"\n      className={classnames({ selected })}\n      onClick={handleClick}\n      title=\"Toggle Playlist Editor\"\n    />\n  );\n});\n\nexport default PlaylistToggleButton;\n","import { memo, Fragment } from \"react\";\nimport Character from \"./Character\";\n\ninterface Props {\n  children: string;\n}\n\nconst CharacterString = memo((props: Props) => {\n  const text = `${props.children}` || \"\";\n  const chars = text.split(\"\");\n  return (\n    <Fragment>\n      {chars.map((character, index) => (\n        <Character key={index + character}>{character}</Character>\n      ))}\n    </Fragment>\n  );\n});\n\nexport default CharacterString;\n","import { memo } from \"react\";\n\nimport CharacterString from \"../CharacterString\";\nimport * as Selectors from \"../../selectors\";\nimport { useTypedSelector } from \"../../hooks\";\n\nconst Kbps = memo(() => {\n  const kbps = useTypedSelector(Selectors.getKbps);\n  return (\n    <div id=\"kbps\">\n      <CharacterString>{kbps || \"\"}</CharacterString>\n    </div>\n  );\n});\n\nexport default Kbps;\n","import { memo } from \"react\";\n\nimport CharacterString from \"../CharacterString\";\nimport * as Selectors from \"../../selectors\";\nimport { useTypedSelector } from \"../../hooks\";\n\nconst Khz = memo(() => {\n  const khz = useTypedSelector(Selectors.getKhz);\n  return (\n    <div id=\"khz\">\n      <CharacterString>{khz || \"\"}</CharacterString>\n    </div>\n  );\n});\n\nexport default Khz;\n","// Single line text display that can animate and hold multiple registers\n// Knows how to display various modes like tracking, volume, balance, etc.\nimport * as React from \"react\";\nimport CharacterString from \"../CharacterString\";\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport * as Utils from \"../../utils\";\n\nconst SEPARATOR = \"  ***  \";\n\nconst CHAR_WIDTH = 5;\nconst MARQUEE_MAX_LENGTH = 31;\n\n// Always positive modulus\nexport const mod = (n: number, m: number): number => ((n % m) + m) % m;\n\nconst isLong = (text: string): boolean => text.length >= MARQUEE_MAX_LENGTH;\n\n// Given text and step, how many pixels should it be shifted?\nexport const stepOffset = (\n  text: string,\n  step: number,\n  pixels: number\n): number => {\n  if (!isLong(text)) {\n    return 0;\n  }\n\n  const stepOffsetWidth = step * CHAR_WIDTH; // Steps move one char at a time\n  const offset = stepOffsetWidth + pixels;\n  const stringLength = (text.length + SEPARATOR.length) * CHAR_WIDTH;\n\n  return mod(offset, stringLength);\n};\n\n// Format an int as pixels\nexport const pixelUnits = (pixels: number): string => `${pixels}px`;\n\n// If text is wider than the marquee, it needs to loop\nexport const loopText = (text: string): string =>\n  isLong(text)\n    ? `${text}${SEPARATOR}${text}`\n    : text.padEnd(MARQUEE_MAX_LENGTH, \" \");\n\ninterface UseStepperArgs {\n  step: () => void;\n  dragging: boolean;\n}\n\n// Call `step` every second, except when dragging. Resume stepping 1 second after dragging ceases.\nfunction useStepper({ step, dragging }: UseStepperArgs): void {\n  const [stepping, setStepping] = React.useState(true);\n  React.useEffect(() => {\n    if (stepping === false) {\n      return;\n    }\n    const stepHandle = setInterval(step, 220);\n    return () => clearInterval(stepHandle);\n  }, [step, stepping]);\n\n  React.useEffect(() => {\n    if (dragging) {\n      setStepping(false);\n      return;\n    }\n    const steppingTimeout = window.setTimeout(() => {\n      setStepping(true);\n    }, 1000);\n    return () => {\n      window.clearTimeout(steppingTimeout);\n    };\n  }, [dragging]);\n}\n\n// When user calls `handleMouseDown`, and moves the mouse, `dragOffset` will update as they drag.\nfunction useDragX() {\n  const [mouseDownX, setMouseDownX] = React.useState<number | null>(null);\n  const [dragOffset, setDragOffset] = React.useState(0);\n\n  React.useEffect(() => {\n    if (mouseDownX == null) {\n      return;\n    }\n    const xStart = mouseDownX;\n    const handleMouseMove = (ee: MouseEvent | TouchEvent) => {\n      const diff = Utils.getX(ee) - xStart;\n      setDragOffset(-diff);\n    };\n\n    // TODO: Use `once` or something instead of this flag nonsense\n    let cleanedUp = false;\n    const handleMouseUp = () => {\n      if (cleanedUp) {\n        return;\n      }\n      document.removeEventListener(\"mousemove\", handleMouseMove);\n      document.removeEventListener(\"touchmove\", handleMouseMove);\n      document.removeEventListener(\"mouseup\", handleMouseUp);\n      document.removeEventListener(\"touchend\", handleMouseUp);\n      setMouseDownX(null);\n      cleanedUp = true;\n    };\n\n    document.addEventListener(\"mousemove\", handleMouseMove);\n    document.addEventListener(\"touchmove\", handleMouseMove);\n    document.addEventListener(\"touseup\", handleMouseUp);\n    document.addEventListener(\"touchend\", handleMouseUp);\n\n    return handleMouseUp;\n  }, [mouseDownX]);\n\n  const handleMouseDown = React.useCallback(\n    (\n      e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>\n    ): void => {\n      setMouseDownX(Utils.getX(e));\n    },\n    []\n  );\n\n  return { handleMouseDown, dragOffset, dragging: mouseDownX != null };\n}\n\nconst Marquee = React.memo(() => {\n  const text = useTypedSelector(Selectors.getMarqueeText);\n  const doubled = useTypedSelector(Selectors.getDoubled);\n  const marqueeStep = useTypedSelector(Selectors.getMarqueeStep);\n  const stepMarquee = useActionCreator(Actions.stepMarquee);\n  const { handleMouseDown, dragOffset, dragging } = useDragX();\n  const offset = stepOffset(text, marqueeStep, dragOffset);\n  const offsetPixels = pixelUnits(-offset);\n\n  useStepper({ step: stepMarquee, dragging });\n\n  return (\n    <div\n      id=\"marquee\"\n      className=\"text\"\n      onPointerDown={handleMouseDown}\n      title=\"Song Title\"\n    >\n      <div\n        style={{\n          whiteSpace: \"nowrap\",\n          willChange: \"transform\",\n          transform: `translateX(${offsetPixels})`,\n        }}\n        // Force the DOM node to be recreated when the doubled size changes.\n        // This works around a Chrome browser bug where the `will-change: transform;`\n        // on this node seems to cause a change to the `image-rendering:\n        // pixelated;` which we inherit from `#webamp` not to be respected.\n        key={doubled ? \"doubled\" : \"not-doubled\"}\n      >\n        <CharacterString>{loopText(text)}</CharacterString>\n      </div>\n    </div>\n  );\n});\n\nexport default Marquee;\n","import { memo } from \"react\";\nimport classnames from \"classnames\";\nimport * as Selectors from \"../../selectors\";\nimport { useTypedSelector } from \"../../hooks\";\n\nconst MonoStereo = memo(() => {\n  const channels = useTypedSelector(Selectors.getChannels);\n  return (\n    <div className=\"mono-stereo\">\n      <div id=\"stereo\" className={classnames({ selected: channels === 2 })} />\n      <div id=\"mono\" className={classnames({ selected: channels === 1 })} />\n    </div>\n  );\n});\n\nexport default MonoStereo;\n","import { FormEvent, memo, useCallback } from \"react\";\nimport * as Selectors from \"../../selectors\";\nimport { useTypedSelector, useTypedDispatch } from \"../../hooks\";\n\nfunction usePosition() {\n  const duration = useTypedSelector(Selectors.getDuration);\n  const timeElapsed = useTypedSelector(Selectors.getTimeElapsed);\n  const position = duration ? (Math.floor(timeElapsed) / duration) * 100 : 0;\n  const scrubPosition = useTypedSelector(Selectors.getUserInputScrubPosition);\n  const userInputFocus = useTypedSelector(Selectors.getUserInputFocus);\n\n  const displayedPosition =\n    userInputFocus === \"position\" ? scrubPosition : position;\n\n  return [position, displayedPosition];\n}\n\nconst Position = memo(() => {\n  const [position, displayedPosition] = usePosition();\n  const dispatch = useTypedDispatch();\n\n  const seekToPercentComplete = useCallback(\n    (e: FormEvent) => {\n      dispatch({\n        type: \"SEEK_TO_PERCENT_COMPLETE\",\n        percent: Number((e.target as HTMLInputElement).value),\n      });\n      dispatch({ type: \"UNSET_FOCUS\" });\n    },\n    [dispatch]\n  );\n\n  const setPosition = useCallback(\n    (e: FormEvent) => {\n      dispatch({ type: \"SET_FOCUS\", input: \"position\" });\n      dispatch({\n        type: \"SET_SCRUB_POSITION\",\n        position: Number((e.target as HTMLInputElement).value),\n      });\n    },\n    [dispatch]\n  );\n\n  // In shade mode, the position slider shows up differently depending on if\n  // it's near the start, middle or end of its progress\n  let className = \"\";\n  if (position <= 33) {\n    className = \"left\";\n  } else if (position >= 66) {\n    className = \"right\";\n  }\n\n  return (\n    <input\n      id=\"position\"\n      className={className}\n      type=\"range\"\n      min=\"0\"\n      max=\"100\"\n      step=\"1\"\n      style={{ touchAction: \"none\" }}\n      value={displayedPosition}\n      onInput={setPosition}\n      onChange={\n        () => {} /* React complains without this, can probably rename onInput to onChange */\n      }\n      onPointerUp={seekToPercentComplete}\n      onPointerDown={setPosition}\n      title=\"Seeking Bar\"\n    />\n  );\n});\n\nexport default Position;\n","import { memo } from \"react\";\nimport classnames from \"classnames\";\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport ContextMenuWraper from \"../ContextMenuWrapper\";\nimport { Node } from \"../ContextMenu\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nconst Repeat = memo(() => {\n  const repeat = useTypedSelector(Selectors.getRepeat);\n  const handleClick = useActionCreator(Actions.toggleRepeat);\n  return (\n    <ContextMenuWraper\n      renderContents={() => (\n        <Node\n          checked={repeat}\n          label=\"Repeat\"\n          onClick={handleClick}\n          hotkey=\"(R)\"\n        />\n      )}\n    >\n      <WinampButton\n        id=\"repeat\"\n        className={classnames({ selected: repeat })}\n        onClick={handleClick}\n        title=\"Toggle Repeat\"\n      />\n    </ContextMenuWraper>\n  );\n});\n\nexport default Repeat;\n","import { memo } from \"react\";\nimport ClickedDiv from \"../ClickedDiv\";\n\nimport * as Actions from \"../../actionCreators\";\nimport { useActionCreator } from \"../../hooks\";\n\nconst Shade = memo(() => {\n  const handleClick = useActionCreator(Actions.toggleMainWindowShadeMode);\n  return (\n    <ClickedDiv\n      id=\"shade\"\n      onPointerDown={handleClick}\n      onDoubleClick={(e) => e.stopPropagation()}\n      title=\"Toggle Windowshade Mode\"\n    />\n  );\n});\n\nexport default Shade;\n","import { memo } from \"react\";\nimport ClickedDiv from \"../ClickedDiv\";\nimport * as Actions from \"../../actionCreators\";\nimport { useActionCreator } from \"../../hooks\";\n\nconst Minimize = memo(() => {\n  const minimize = useActionCreator(Actions.minimize);\n  return <ClickedDiv id=\"minimize\" title=\"Minimize\" onClick={minimize} />;\n});\n\nexport default Minimize;\n","import { memo } from \"react\";\nimport classnames from \"classnames\";\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport ContextMenuWraper from \"../ContextMenuWrapper\";\nimport { Node } from \"../ContextMenu\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nconst Shuffle = memo(() => {\n  const shuffle = useTypedSelector(Selectors.getShuffle);\n  const handleClick = useActionCreator(Actions.toggleShuffle);\n  return (\n    <ContextMenuWraper\n      renderContents={() => (\n        <Node\n          checked={shuffle}\n          label=\"Shuffle\"\n          onClick={handleClick}\n          hotkey=\"(S)\"\n        />\n      )}\n    >\n      <WinampButton\n        id=\"shuffle\"\n        className={classnames({ selected: shuffle })}\n        onClick={handleClick}\n        title=\"Toggle Shuffle\"\n      />\n    </ContextMenuWraper>\n  );\n});\n\nexport default Shuffle;\n","import { memo } from \"react\";\nimport * as Utils from \"../../utils\";\n\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport { TIME_MODE } from \"../../constants\";\nimport { useActionCreator, useTypedSelector } from \"../../hooks\";\n\nconst Time = memo(() => {\n  const toggleTimeMode = useActionCreator(Actions.toggleTimeMode);\n  const timeElapsed = useTypedSelector(Selectors.getTimeElapsed);\n  const duration = useTypedSelector(Selectors.getDuration) || 0;\n  const timeMode = useTypedSelector(Selectors.getTimeMode);\n  const seconds =\n    timeMode === TIME_MODE.ELAPSED ? timeElapsed : duration - timeElapsed;\n\n  const timeObj = Utils.getTimeObj(seconds);\n  return (\n    <div id=\"time\" onClick={toggleTimeMode} className=\"countdown\">\n      {timeMode === TIME_MODE.REMAINING && <div id=\"minus-sign\" />}\n      <div\n        id=\"minute-first-digit\"\n        className={`digit digit-${timeObj.minutesFirstDigit}`}\n      />\n      <div\n        id=\"minute-second-digit\"\n        className={`digit digit-${timeObj.minutesSecondDigit}`}\n      />\n      <div\n        id=\"second-first-digit\"\n        className={`digit digit-${timeObj.secondsFirstDigit}`}\n      />\n      <div\n        id=\"second-second-digit\"\n        className={`digit digit-${timeObj.secondsSecondDigit}`}\n      />\n    </div>\n  );\n});\n\nexport default Time;\n","import * as React from \"react\";\nimport * as Actions from \"../actionCreators\";\nimport * as Selectors from \"../selectors\";\nimport { useTypedSelector, useActionCreator } from \"../hooks\";\n\ninterface Props {\n  id?: string;\n  style?: React.CSSProperties;\n  className?: string;\n}\n\nexport default function Volume({ id, style, className }: Props) {\n  const volume = useTypedSelector(Selectors.getVolume);\n  const setFocus = useActionCreator(Actions.setFocus);\n  const unsetFocus = useActionCreator(Actions.unsetFocus);\n  const setVolume = useActionCreator(Actions.setVolume);\n\n  return (\n    <input\n      id={id}\n      type=\"range\"\n      min=\"0\"\n      max=\"100\"\n      step=\"1\"\n      value={volume}\n      style={{ ...style, touchAction: \"none\" }}\n      className={className}\n      onChange={(e) => setVolume(Number(e.target.value))}\n      onPointerDown={() => setFocus(\"volume\")}\n      onPointerUp={unsetFocus}\n      title=\"Volume Bar\"\n    />\n  );\n}\n","import { memo } from \"react\";\nimport * as Selectors from \"../../selectors\";\n\nimport Volume from \"../Volume\";\nimport { useTypedSelector } from \"../../hooks\";\n\nconst MainVolume = memo(() => {\n  const volume = useTypedSelector(Selectors.getVolume);\n  const percent = volume / 100;\n  const sprite = Math.round(percent * 28);\n  const offset = (sprite - 1) * 15;\n\n  const style = {\n    backgroundPosition: `0 -${offset}px`,\n  };\n  return (\n    <div id=\"volume\" style={style}>\n      <Volume />\n    </div>\n  );\n});\n\nexport default MainVolume;\n","import * as React from \"react\";\nimport classnames from \"classnames\";\nimport { WINDOWS, MEDIA_STATUS, LOAD_STYLE } from \"../../constants\";\nimport * as Actions from \"../../actionCreators\";\n\nimport DropTarget from \"../DropTarget\";\nimport MiniTime from \"../MiniTime\";\n\nimport ClickedDiv from \"../ClickedDiv\";\nimport ContextMenuTarget from \"../ContextMenuTarget\";\nimport Vis from \"../Vis\";\nimport ActionButtons from \"./ActionButtons\";\nimport MainBalance from \"./MainBalance\";\nimport Close from \"./Close\";\nimport ClutterBar from \"./ClutterBar\";\nimport MainContextMenu from \"./MainContextMenu\";\nimport Eject from \"./Eject\";\nimport EqToggleButton from \"./EqToggleButton\";\nimport PlaylistToggleButton from \"./PlaylistToggleButton\";\nimport Kbps from \"./Kbps\";\nimport Khz from \"./Khz\";\nimport Marquee from \"./Marquee\";\nimport MonoStereo from \"./MonoStereo\";\nimport Position from \"./Position\";\nimport Repeat from \"./Repeat\";\nimport Shade from \"./Shade\";\nimport Minimize from \"./Minimize\";\nimport Shuffle from \"./Shuffle\";\nimport Time from \"./Time\";\nimport MainVolume from \"./MainVolume\";\nimport * as Selectors from \"../../selectors\";\n\nimport { FilePicker } from \"../../types\";\nimport FocusTarget from \"../FocusTarget\";\nimport { useActionCreator, useTypedSelector } from \"../../hooks\";\n\ninterface Props {\n  analyser: AnalyserNode;\n  filePickers: FilePicker[];\n}\n\nfunction loadMediaAndPlay(e: React.DragEvent<HTMLDivElement>) {\n  return Actions.loadMedia(e, LOAD_STYLE.PLAY);\n}\n\nconst MainWindow = React.memo(({ analyser, filePickers }: Props) => {\n  const mainShade = useTypedSelector(Selectors.getWindowShade)(\"main\");\n  const status = useTypedSelector(Selectors.getMediaStatus);\n  const focused = useTypedSelector(Selectors.getFocusedWindow);\n  const loading = useTypedSelector(Selectors.getLoading);\n  const doubled = useTypedSelector(Selectors.getDoubled);\n  const llama = useTypedSelector(Selectors.getLlamaMode);\n  const working = useTypedSelector(Selectors.getWorking);\n\n  const className = classnames({\n    window: true,\n    play: status === MEDIA_STATUS.PLAYING,\n    stop: status === MEDIA_STATUS.STOPPED,\n    pause: status === MEDIA_STATUS.PAUSED,\n    selected: focused === WINDOWS.MAIN,\n    shade: mainShade,\n    draggable: true,\n    loading,\n    doubled,\n    llama,\n  });\n\n  const toggleMainWindowShadeMode = useActionCreator(\n    Actions.toggleMainWindowShadeMode\n  );\n  const scrollVolume = useActionCreator(Actions.scrollVolume);\n  const loadMedia = useActionCreator(loadMediaAndPlay);\n\n  return (\n    <DropTarget\n      id=\"main-window\"\n      windowId={WINDOWS.MAIN}\n      className={className}\n      handleDrop={loadMedia}\n      onWheelActive={scrollVolume}\n    >\n      <FocusTarget windowId={WINDOWS.MAIN}>\n        <div\n          id=\"title-bar\"\n          className=\"selected draggable\"\n          onDoubleClick={toggleMainWindowShadeMode}\n        >\n          <ContextMenuTarget\n            id=\"option-context\"\n            bottom\n            renderMenu={() => <MainContextMenu filePickers={filePickers} />}\n          >\n            <ClickedDiv id=\"option\" title=\"Winamp Menu\" />\n          </ContextMenuTarget>\n          {mainShade && <MiniTime />}\n          <Minimize />\n          <Shade />\n          <Close />\n        </div>\n        <div className=\"webamp-status\">\n          <ClutterBar />\n          {!working && <div id=\"play-pause\" />}\n          <div\n            id=\"work-indicator\"\n            className={classnames({ selected: working })}\n          />\n          <Time />\n        </div>\n        <Vis analyser={analyser} />\n        <div className=\"media-info\">\n          <Marquee />\n          <Kbps />\n          <Khz />\n          <MonoStereo />\n        </div>\n        <MainVolume />\n        <MainBalance />\n        <div className=\"windows\">\n          <EqToggleButton />\n          <PlaylistToggleButton />\n        </div>\n        <Position />\n        <ActionButtons />\n        <Eject />\n        <div className=\"shuffle-repeat\">\n          <Shuffle />\n          <Repeat />\n        </div>\n        <a\n          id=\"about\"\n          target=\"_blank\"\n          href=\"https://webamp.org/about\"\n          title=\"About\"\n        />\n      </FocusTarget>\n    </DropTarget>\n  );\n});\n\nexport default MainWindow;\n","import ResizeTarget from \"../ResizeTarget\";\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\n\ntype Props = {\n  widthOnly?: boolean;\n};\n\nfunction PlaylistResizeTarget({ widthOnly }: Props) {\n  const windowSize = useTypedSelector(Selectors.getWindowSize);\n  const setWindowSize = useActionCreator(Actions.setWindowSize);\n  const currentSize = windowSize(\"playlist\");\n\n  return (\n    <ResizeTarget\n      currentSize={currentSize}\n      id=\"playlist-resize-target\"\n      setWindowSize={(size) => {\n        setWindowSize(\"playlist\", size);\n      }}\n      widthOnly={widthOnly}\n    />\n  );\n}\nexport default PlaylistResizeTarget;\n","import { useMemo } from \"react\";\nimport classnames from \"classnames\";\nimport { getTimeStr } from \"../../utils\";\nimport * as Selectors from \"../../selectors\";\n\nimport {\n  WINDOWS,\n  WINDOW_RESIZE_SEGMENT_WIDTH,\n  WINDOW_WIDTH,\n  CHARACTER_WIDTH,\n  UTF8_ELLIPSIS,\n} from \"../../constants\";\nimport * as Actions from \"../../actionCreators\";\nimport CharacterString from \"../CharacterString\";\nimport PlaylistResizeTarget from \"./PlaylistResizeTarget\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nfunction PlaylistShade() {\n  const focused = useTypedSelector(Selectors.getFocusedWindow);\n  const getWindowSize = useTypedSelector(Selectors.getWindowSize);\n  const playlistSize = getWindowSize(\"playlist\");\n  const duration = useTypedSelector(Selectors.getDuration);\n  const name = useTypedSelector(Selectors.getMinimalMediaText);\n\n  const closeWindow = useActionCreator(Actions.closeWindow);\n  const toggleShade = useActionCreator(Actions.togglePlaylistShadeMode);\n  const focusWindow = useActionCreator(Actions.setFocusedWindow);\n\n  const addedWidth = playlistSize[0] * WINDOW_RESIZE_SEGMENT_WIDTH;\n\n  const trimmedName = useMemo(() => {\n    if (name == null) {\n      return \"[No file]\";\n    }\n\n    const MIN_NAME_WIDTH = 205;\n\n    const nameLength = (MIN_NAME_WIDTH + addedWidth) / CHARACTER_WIDTH;\n    return name.length > nameLength\n      ? name.slice(0, nameLength - 1) + UTF8_ELLIPSIS\n      : name;\n  }, [addedWidth, name]);\n\n  const time = useMemo(() => {\n    return name == null ? \"\" : getTimeStr(duration);\n  }, [duration, name]);\n\n  return (\n    <div\n      id=\"playlist-window-shade\"\n      className={classnames(\"window\", \"draggable\", {\n        selected: focused === WINDOWS.PLAYLIST,\n      })}\n      style={{ width: `${WINDOW_WIDTH + addedWidth}px` }}\n      onPointerDown={() => focusWindow(\"playlist\")}\n      onDoubleClick={toggleShade}\n    >\n      <div className=\"left\">\n        <div className=\"right draggable\">\n          <div id=\"playlist-shade-track-title\">\n            <CharacterString>{trimmedName}</CharacterString>\n          </div>\n          <div id=\"playlist-shade-time\">\n            <CharacterString>{time}</CharacterString>\n          </div>\n          <PlaylistResizeTarget widthOnly />\n          <WinampButton id=\"playlist-shade-button\" onClick={toggleShade} />\n          <WinampButton\n            id=\"playlist-close-button\"\n            onClick={() => closeWindow(\"playlist\")}\n          />\n        </div>\n      </div>\n    </div>\n  );\n}\n\nexport default PlaylistShade;\n","import { memo, ReactNode } from \"react\";\nimport classnames from \"classnames\";\nimport { useIsHovered } from \"../../hooks\";\n\ninterface Props {\n  children: ReactNode;\n}\n\n// We implement hover ourselves, because we hate ourselves and https://stackoverflow.com/a/13259049/1263117\nfunction PlaylistMenuEntry({ children }: Props) {\n  const { ref, hover } = useIsHovered();\n  return (\n    <li ref={ref} className={classnames({ hover })}>\n      {children}\n    </li>\n  );\n}\n\nexport default memo(PlaylistMenuEntry);\n","import { Children, memo, useState, ReactNode, useCallback } from \"react\";\nimport classnames from \"classnames\";\nimport { useOnClickAway } from \"../../hooks\";\n\nimport PlaylistMenuEntry from \"./PlaylistMenuEntry\";\n\ninterface Props {\n  id: string;\n  children: ReactNode | Array<ReactNode>;\n}\n\ninterface State {\n  selected: boolean;\n}\n\nfunction PlaylistMenu(props: Props) {\n  const [selected, setSelected] = useState(false);\n\n  const [ref, setRef] = useState<Element | null>(null);\n\n  const callback = useCallback(() => {\n    // If we've clicked on a Context Menu spawed inside this menu, it will\n    // register as an external click. However, hiding the menu will remove\n    // the Context Menu from the DOM. Therefore, we wait until the next\n    // event loop to actually hide ourselves.\n    setTimeout(() => {\n      // Close the menu\n      setSelected(false);\n    }, 0);\n  }, []);\n\n  useOnClickAway(ref, selected ? callback : null);\n\n  return (\n    <div\n      id={props.id}\n      className={classnames(\"playlist-menu\", {\n        selected,\n      })}\n      ref={setRef}\n      onClick={() => setSelected((selected_) => !selected_)}\n    >\n      <div className=\"bar\" />\n      {selected && (\n        <ul>\n          {Children.map(props.children, (child, i) => (\n            <PlaylistMenuEntry key={i}>{child}</PlaylistMenuEntry>\n          ))}\n        </ul>\n      )}\n    </div>\n  );\n}\nexport default memo(PlaylistMenu);\n","import * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport PlaylistMenu from \"./PlaylistMenu\";\n\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\n\nconst AddMenu = () => {\n  const nextIndex = useTypedSelector(Selectors.getTrackCount);\n  const addDirAtIndex = useActionCreator(Actions.addDirAtIndex);\n  const addFilesAtIndex = useActionCreator(Actions.addFilesAtIndex);\n  const addFilesFromUrl = useActionCreator(Actions.addFilesFromUrl);\n  return (\n    <PlaylistMenu id=\"playlist-add-menu\">\n      <div className=\"add-url\" onClick={() => addFilesFromUrl(nextIndex)} />\n      <div className=\"add-dir\" onClick={() => addDirAtIndex(nextIndex)} />\n      <div className=\"add-file\" onClick={() => addFilesAtIndex(nextIndex)} />\n    </PlaylistMenu>\n  );\n};\n\nexport default AddMenu;\n","import * as Actions from \"../../actionCreators\";\nimport PlaylistMenu from \"./PlaylistMenu\";\nimport { useActionCreator } from \"../../hooks\";\n\n/* eslint-disable no-alert */\n\nconst RemoveMenu = () => {\n  const removeSelected = useActionCreator(Actions.removeSelectedTracks);\n  const removeAll = useActionCreator(Actions.removeAllTracks);\n  const crop = useActionCreator(Actions.cropPlaylist);\n  return (\n    <PlaylistMenu id=\"playlist-remove-menu\">\n      <div\n        className=\"remove-misc\"\n        onClick={() => alert(\"Not supported in Webamp\")}\n      />\n      <div className=\"remove-all\" onClick={removeAll} />\n      <div className=\"crop\" onClick={crop} />\n      <div className=\"remove-selected\" onClick={removeSelected} />\n    </PlaylistMenu>\n  );\n};\n\nexport default RemoveMenu;\n","import PlaylistMenu from \"./PlaylistMenu\";\nimport * as Actions from \"../../actionCreators\";\nimport { useActionCreator } from \"../../hooks\";\n\nexport default function SelectionMenu() {\n  const invert = useActionCreator(Actions.invertSelection);\n  const zero = useActionCreator(Actions.selectZero);\n  const all = useActionCreator(Actions.selectAll);\n  return (\n    <PlaylistMenu id=\"playlist-selection-menu\">\n      <div className=\"invert-selection\" onClick={invert} />\n      <div className=\"select-zero\" onClick={zero} />\n      <div className=\"select-all\" onClick={all} />\n    </PlaylistMenu>\n  );\n}\n","import * as Actions from \"../../actionCreators\";\n\nimport { Hr, Node } from \"../ContextMenu\";\nimport ContextMenuTarget from \"../ContextMenuTarget\";\nimport { useActionCreator } from \"../../hooks\";\n\ninterface DispatchProps {\n  sortListByTitle: () => void;\n  reverseList: () => void;\n  randomizeList: () => void;\n}\n\n/* eslint-disable no-alert */\n/* TODO: This should really be kitty-corner to the upper right hand corner of the MiscMenu */\nexport default function SortContextMenu() {\n  const reverseList = useActionCreator(Actions.reverseList);\n  const randomizeList = useActionCreator(Actions.randomizeList);\n  const sortListByTitle = useActionCreator(Actions.sortListByTitle);\n  return (\n    <ContextMenuTarget\n      style={{ width: \"100%\", height: \"100%\" }}\n      top\n      renderMenu={() => (\n        <>\n          <Node label=\"Sort list by title\" onClick={sortListByTitle} />\n          <Hr />\n          <Node label=\"Reverse list\" onClick={reverseList} />\n          <Node label=\"Randomize list\" onClick={randomizeList} />\n        </>\n      )}\n    >\n      <div />\n    </ContextMenuTarget>\n  );\n}\n","import { Node } from \"../ContextMenu\";\nimport ContextMenuTarget from \"../ContextMenuTarget\";\nimport * as Actions from \"../../actionCreators\";\nimport { useActionCreator } from \"../../hooks\";\n\nconst MiscOptionsContextMenu = () => {\n  const downloadHtmlPlaylist = useActionCreator(Actions.downloadHtmlPlaylist);\n  return (\n    <ContextMenuTarget\n      style={{ width: \"100%\", height: \"100%\" }}\n      top\n      renderMenu={() => (\n        <Node onClick={downloadHtmlPlaylist} label=\"Generate HTML playlist\" />\n      )}\n    >\n      <div />\n    </ContextMenuTarget>\n  );\n};\n\nexport default MiscOptionsContextMenu;\n","import PlaylistMenu from \"./PlaylistMenu\";\nimport SortContextMenu from \"./SortContextMenu\";\nimport MiscOptionsContextMenu from \"./MiscOptionsContextMenu\";\n\nconst MiscMenu = () => (\n  <PlaylistMenu id=\"playlist-misc-menu\">\n    <div className=\"sort-list\" onClick={(e) => e.stopPropagation()}>\n      <SortContextMenu />\n    </div>\n    <div\n      className=\"file-info\"\n      onClick={() => alert(\"Not supported in Webamp\")}\n    />\n\n    <div className=\"misc-options\" onClick={(e) => e.stopPropagation()}>\n      <MiscOptionsContextMenu />\n    </div>\n  </PlaylistMenu>\n);\n\nexport default MiscMenu;\n","import * as Actions from \"../../actionCreators\";\nimport PlaylistMenu from \"./PlaylistMenu\";\nimport { useActionCreator } from \"../../hooks\";\n\n/* eslint-disable no-alert */\nexport default function ListMenu() {\n  const removeAllTracks = useActionCreator(Actions.removeAllTracks);\n  const addFilesFromList = useActionCreator(Actions.addFilesFromList);\n  const saveFilesToList = useActionCreator(Actions.saveFilesToList);\n  return (\n    <PlaylistMenu id=\"playlist-list-menu\">\n      <div className=\"new-list\" onClick={removeAllTracks} />\n      <div className=\"save-list\" onClick={saveFilesToList} />\n      <div className=\"load-list\" onClick={addFilesFromList} />\n    </PlaylistMenu>\n  );\n}\n","import { useMemo } from \"react\";\n\nimport CharacterString from \"../CharacterString\";\nimport * as Actions from \"../../selectors\";\nimport { useTypedSelector } from \"../../hooks\";\n\n// While all the browsers I care about support String.prototype.padEnd,\n// Not all node versions do, and I want tests to pass in Jest...\n// Sigh.\nfunction rightPad(str: string, len: number, fillChar: string): string {\n  while (str.length < len) {\n    str += fillChar;\n  }\n  return str;\n}\n\nconst RunningTimeDisplay = () => {\n  const runningTimeMessage = useTypedSelector(Actions.getRunningTimeMessage);\n  const text = useMemo(\n    () => rightPad(runningTimeMessage, 18, \" \"),\n    [runningTimeMessage]\n  );\n  return (\n    <div className=\"playlist-running-time-display draggable\">\n      {/* This div is probably not strictly needed */}\n      <div>\n        <CharacterString>{text}</CharacterString>\n      </div>\n    </div>\n  );\n};\n\nexport default RunningTimeDisplay;\n","import { Fragment } from \"react\";\n\nimport * as Actions from \"../../actionCreators\";\n\nimport MiniTime from \"../MiniTime\";\nimport RunningTimeDisplay from \"./RunningTimeDisplay\";\nimport { useActionCreator } from \"../../hooks\";\n\nconst PlaylistWindow = () => {\n  const play = useActionCreator(Actions.play);\n  const pause = useActionCreator(Actions.pause);\n  const stop = useActionCreator(Actions.stop);\n  const openMediaFileDialog = useActionCreator(Actions.openMediaFileDialog);\n  const next = useActionCreator(Actions.next);\n  const previous = useActionCreator(Actions.previous);\n  return (\n    <Fragment>\n      <RunningTimeDisplay />\n      <div className=\"playlist-action-buttons\">\n        <div className=\"playlist-previous-button\" onClick={previous} />\n        <div className=\"playlist-play-button\" onClick={play} />\n        <div className=\"playlist-pause-button\" onClick={pause} />\n        <div className=\"playlist-stop-button\" onClick={stop} />\n        <div className=\"playlist-next-button\" onClick={next} />\n        <div className=\"playlist-eject-button\" onClick={openMediaFileDialog} />\n      </div>\n      <MiniTime />\n    </Fragment>\n  );\n};\nexport default PlaylistWindow;\n","import { useCallback, ReactNode, TouchEvent } from \"react\";\nimport classnames from \"classnames\";\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport {\n  useTypedSelector,\n  useActionCreator,\n  useTypedDispatch,\n} from \"../../hooks\";\n\ninterface Props {\n  id: number;\n  index: number;\n  handleMoveClick: (\n    e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>\n  ) => void;\n  children: ReactNode;\n}\n\nfunction TrackCell({ children, handleMoveClick, index, id }: Props) {\n  const skinPlaylistStyle = useTypedSelector(Selectors.getSkinPlaylistStyle);\n  const selectedTrackIds = useTypedSelector(Selectors.getSelectedTrackIdsSet);\n  const currentTrackId = useTypedSelector(Selectors.getCurrentTrackId);\n  const selected = selectedTrackIds.has(id);\n  const current = currentTrackId === id;\n\n  const dispatch = useTypedDispatch();\n  const playTrackNow = useActionCreator(Actions.playTrackNow);\n\n  const onMouseDown = useCallback(\n    (e: React.MouseEvent<HTMLDivElement>) => {\n      if (e.shiftKey) {\n        e.preventDefault();\n        dispatch({ type: \"SHIFT_CLICKED_TRACK\", index });\n        return;\n      } else if (e.metaKey || e.ctrlKey) {\n        e.preventDefault();\n        dispatch({ type: \"CTRL_CLICKED_TRACK\", index });\n        return;\n      }\n\n      if (!selected) {\n        dispatch({ type: \"CLICKED_TRACK\", index });\n      }\n\n      handleMoveClick(e);\n    },\n    [dispatch, handleMoveClick, index, selected]\n  );\n\n  const handleTouchStart = useCallback(\n    (e: TouchEvent<HTMLDivElement>) => {\n      if (!selected) {\n        dispatch({ type: \"CLICKED_TRACK\", index });\n      }\n      handleMoveClick(e);\n\n      // There's no touch equivalent of onDoubleClick, so we fake one:\n      function handleSecondTap() {\n        playTrackNow(id);\n      }\n      e.target.addEventListener(\"touchstart\", handleSecondTap);\n      setTimeout(() => {\n        // Technically we might be unmounted here, but that's fine since you\n        // can't tap an unmounted element and we will clean up eventually.\n        e.target.removeEventListener(\"touchstart\", handleSecondTap);\n      }, 250);\n    },\n    [dispatch, handleMoveClick, id, index, playTrackNow, selected]\n  );\n\n  const style: React.CSSProperties = {\n    backgroundColor: selected ? skinPlaylistStyle.selectedbg : undefined,\n    color: current ? skinPlaylistStyle.current : undefined,\n  };\n  return (\n    <div\n      className={classnames(\"track-cell\", { selected, current })}\n      style={style}\n      onClick={(e) => e.stopPropagation()}\n      onMouseDown={onMouseDown}\n      onTouchStart={handleTouchStart}\n      onContextMenu={(e) => e.preventDefault()}\n      onDoubleClick={() => playTrackNow(id)}\n    >\n      {children}\n    </div>\n  );\n}\n\nexport default TrackCell;\n","import * as Selectors from \"../../selectors\";\nimport { useTypedSelector } from \"../../hooks\";\n\ninterface Props {\n  id: number;\n  paddedTrackNumber: string;\n}\n\nconst TrackTitle = ({ id, paddedTrackNumber }: Props) => {\n  const title = useTypedSelector(Selectors.getTrackDisplayName)(id);\n  return (\n    <span>\n      {paddedTrackNumber}. {title}\n    </span>\n  );\n};\n\nexport default TrackTitle;\n","import { useState, useEffect } from \"react\";\n\nimport * as Selectors from \"../../selectors\";\nimport { TRACK_HEIGHT } from \"../../constants\";\nimport * as Actions from \"../../actionCreators\";\nimport TrackCell from \"./TrackCell\";\nimport TrackTitle from \"./TrackTitle\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport * as Utils from \"../../utils\";\n\nfunction getNumberLength(number: number): number {\n  return number.toString().length;\n}\n\nfunction TrackList() {\n  const offset = useTypedSelector(Selectors.getScrollOffset);\n  const trackIds = useTypedSelector(Selectors.getVisibleTrackIds);\n  const tracks = useTypedSelector(Selectors.getTracks);\n  const numberOfTracks = useTypedSelector(Selectors.getNumberOfTracks);\n\n  const selectZero = useActionCreator(Actions.selectZero);\n  const dragSelected = useActionCreator(Actions.dragSelected);\n  const scrollPlaylistByDelta = useActionCreator(Actions.scrollPlaylistByDelta);\n\n  const [node, setNode] = useState<HTMLElement | null>(null);\n  const [moving, setMoving] = useState(false);\n  const [mouseStartY, setMouseStartY] = useState<number | null>(null);\n\n  const _handleMoveClick = (\n    e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>\n  ) => {\n    setMoving(true);\n    setMouseStartY(Utils.getY(e));\n  };\n\n  useEffect(() => {\n    if (node == null || mouseStartY == null || moving === false) {\n      return;\n    }\n    const { top, bottom, left, right } = node.getBoundingClientRect();\n    let lastDiff = 0;\n    const handleMouseMove = (ee: MouseEvent | TouchEvent) => {\n      const x = Utils.getX(ee);\n      const y = Utils.getY(ee);\n      if (y < top || y > bottom || x < left || x > right) {\n        // Mouse is outside the track list\n        return;\n      }\n      const proposedDiff = Math.floor((y - mouseStartY) / TRACK_HEIGHT);\n      if (proposedDiff !== lastDiff) {\n        const diffDiff = proposedDiff - lastDiff;\n        dragSelected(diffDiff);\n        lastDiff = proposedDiff;\n      }\n    };\n\n    // A little indirect here. Basically, we set `moving` false here which\n    // causes our useEffect to rerun which removes all of these event listeners.\n    // It might be a little tigher to actually remove these listeners in the\n    // `handleMouseUp` callback, but... I'm lazy.\n    const handleMouseUp = () => setMoving(false);\n    window.addEventListener(\"mouseup\", handleMouseUp);\n    window.addEventListener(\"mousemove\", handleMouseMove);\n    window.addEventListener(\"touchend\", handleMouseUp);\n    window.addEventListener(\"touchmove\", handleMouseMove);\n    return () => {\n      window.removeEventListener(\"mousemove\", handleMouseMove);\n      window.removeEventListener(\"touchmove\", handleMouseMove);\n      window.removeEventListener(\"mouseup\", handleMouseUp);\n      window.removeEventListener(\"touchend\", handleMouseUp);\n    };\n    // I'm not 100% sure how well this would work if it rebound mid drag, so\n    // we'll just pretend it's okay that we have stale values in there.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [moving]);\n\n  function _renderTracks(\n    format: (id: number, i: number) => JSX.Element | string\n  ) {\n    return trackIds.map((id, i) => (\n      <TrackCell\n        key={id}\n        id={id}\n        index={offset + i}\n        handleMoveClick={_handleMoveClick}\n      >\n        {format(id, i)}\n      </TrackCell>\n    ));\n  }\n\n  const maxTrackNumberLength = getNumberLength(numberOfTracks);\n  const paddedTrackNumForIndex = (i: number) =>\n    (i + 1 + offset).toString().padStart(maxTrackNumberLength, \"\\u00A0\");\n\n  useEffect(() => {\n    if (node == null) {\n      return;\n    }\n\n    // Chome changed wheel events to be passive be default. We need active (so\n    // we can prevent default) and React does not have a way to control this, so\n    // we must bind our own events.\n    //\n    // https://github.com/facebook/react/issues/14856#issuecomment-806052402\n    node.addEventListener(\"wheel\", scrollPlaylistByDelta, { passive: false });\n\n    return () => {\n      node.removeEventListener(\"wheel\", scrollPlaylistByDelta);\n    };\n  }, [node, scrollPlaylistByDelta]);\n  return (\n    <div\n      ref={setNode}\n      className=\"playlist-tracks\"\n      style={{ height: \"100%\", userSelect: \"none\" }}\n      onClick={selectZero}\n    >\n      <div className=\"playlist-track-titles\">\n        {_renderTracks((id, i) => (\n          <TrackTitle id={id} paddedTrackNumber={paddedTrackNumForIndex(i)} />\n        ))}\n      </div>\n      <div className=\"playlist-track-durations\">\n        {_renderTracks((id) => Utils.getTimeStr(tracks[id].duration))}\n      </div>\n    </div>\n  );\n}\n\nexport default TrackList;\n","import * as Utils from \"../utils\";\nimport { ReactNode, useRef } from \"react\";\n\ntype Props = {\n  height: number;\n  width: number;\n  handleHeight: number;\n  value: number;\n  handle: ReactNode;\n  onBeforeChange?: () => void;\n  onChange: (value: number) => void;\n  onAfterChange?: () => void;\n  requireClicksOriginateLocally?: boolean;\n  disabled?: boolean;\n};\n\ntype RegOptions = {\n  target: HTMLElement;\n  clientY: number;\n};\n\n// `<input type=\"range\" />` can be rotated to become a vertical slider using\n// CSS, but that makes it impossible to style the handle in a pixel perfect\n// manner. Instead we reimplement it in React.\nexport default function VerticalSlider({\n  value,\n  height,\n  width,\n  handle,\n  handleHeight,\n  onBeforeChange,\n  onChange,\n  onAfterChange,\n  requireClicksOriginateLocally = true,\n  disabled,\n}: Props) {\n  const ref = useRef<HTMLDivElement | null>(null);\n  const handleRef = useRef<HTMLDivElement | null>(null);\n\n  function registerMoveListener({ target, clientY }: RegOptions) {\n    const sliderNode = ref.current;\n    const handleNode = handleRef.current;\n    if (sliderNode == null || handleNode == null) {\n      // I don't think this could ever happen in practice\n      return null;\n    }\n\n    const sliderRect = sliderNode.getBoundingClientRect();\n    const handleRect = handleNode.getBoundingClientRect();\n\n    const { top: sliderTop, height: sliderHeight } = sliderRect;\n    const { top: handleTop, height: realHandleHeight } = handleRect;\n\n    // If the user clicks on the handle we want them to continue to hold onto\n    // that point of te handle. If they click outside of the handle (in the\n    // slider itself) we want to center the handle at that point and have them\n    // move the handle from the center.\n    const handleOffset = handleNode.contains(target as HTMLElement)\n      ? clientY - handleTop\n      : realHandleHeight / 2;\n\n    const baseOffset = sliderTop + handleOffset;\n    // Measure the actual rect height rather than use the `height` prop, becuase\n    // we might be in double-size mode.\n    const spanSize = sliderHeight - realHandleHeight;\n\n    function moveToPosition(y: number) {\n      // Ensure dragging does not cause elements/text to be selected.\n      // https://stackoverflow.com/a/19164149/1263117\n      const startOffset = y - baseOffset;\n      onChange(Utils.clamp(startOffset / spanSize, 0, 1));\n    }\n\n    const handlePointerMove = (event: PointerEvent) => {\n      event.preventDefault();\n      moveToPosition(event.clientY);\n    };\n    const handleRelease = () => {\n      if (onAfterChange != null) {\n        onAfterChange();\n      }\n      document.removeEventListener(\"pointermove\", handlePointerMove);\n      document.removeEventListener(\"pointerup\", handleRelease);\n    };\n    document.addEventListener(\"pointermove\", handlePointerMove);\n    document.addEventListener(\"pointerup\", handleRelease);\n\n    if (onBeforeChange != null) {\n      onBeforeChange();\n    }\n\n    // Move the slider to where they've started.\n    moveToPosition(clientY);\n  }\n\n  function handlePointerDown(e: React.PointerEvent<HTMLDivElement>) {\n    e.preventDefault();\n    registerMoveListener({\n      target: e.target as HTMLElement,\n      clientY: e.clientY,\n    });\n  }\n\n  // We watch for events onPointerEnter only when requireClicksOriginateLocally === false\n  // If the mouse/touch enters the Slider area, and the button/touch is already down, trigger a PointerDown\n  function handlePointerEnter(e: React.PointerEvent<HTMLDivElement>) {\n    if (e.buttons === 1) {\n      handlePointerDown(e);\n    }\n  }\n\n  const offset = Math.floor((height - handleHeight) * value);\n  return (\n    <div\n      style={{ height, width }}\n      onPointerDown={disabled ? undefined : handlePointerDown}\n      onPointerEnter={\n        disabled || requireClicksOriginateLocally\n          ? undefined\n          : handlePointerEnter\n      }\n      ref={ref}\n    >\n      <div style={{ transform: `translateY(${offset}px)` }} ref={handleRef}>\n        {handle}\n      </div>\n    </div>\n  );\n}\n","import VerticalSlider from \"../VerticalSlider\";\n\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport { WINDOWS } from \"../../constants\";\n\nconst HANDLE_HEIGHT = 18;\n\nconst Handle = () => (\n  <div\n    className=\"playlist-scrollbar-handle\"\n    style={{ height: HANDLE_HEIGHT }}\n  />\n);\n\nexport default function PlaylistScrollBar() {\n  const getWindowPixelSize = useTypedSelector(Selectors.getWindowPixelSize);\n  const playlistHeight = getWindowPixelSize(WINDOWS.PLAYLIST).height;\n  const playlistScrollPosition = useTypedSelector(\n    Selectors.getPlaylistScrollPosition\n  );\n  const allTracksAreVisible = useTypedSelector(\n    Selectors.getAllTracksAreVisible\n  );\n  const setPlaylistScrollPosition = useActionCreator(\n    Actions.setPlaylistScrollPosition\n  );\n  return (\n    <div className=\"playlist-scrollbar\" style={{ marginLeft: 5 }}>\n      <VerticalSlider\n        height={playlistHeight - 58}\n        handleHeight={HANDLE_HEIGHT}\n        width={8}\n        value={playlistScrollPosition / 100}\n        onChange={(val) => setPlaylistScrollPosition(val * 100)}\n        handle={<Handle />}\n        disabled={allTracksAreVisible}\n      />\n    </div>\n  );\n}\n","import { useCallback } from \"react\";\nimport classnames from \"classnames\";\n\nimport { WINDOWS, TRACK_HEIGHT, LOAD_STYLE } from \"../../constants\";\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\n\nimport { clamp } from \"../../utils\";\nimport DropTarget from \"../DropTarget\";\nimport Vis from \"../Vis\";\nimport PlaylistShade from \"./PlaylistShade\";\nimport AddMenu from \"./AddMenu\";\nimport RemoveMenu from \"./RemoveMenu\";\nimport SelectionMenu from \"./SelectionMenu\";\nimport MiscMenu from \"./MiscMenu\";\nimport ListMenu from \"./ListMenu\";\nimport PlaylistResizeTarget from \"./PlaylistResizeTarget\";\nimport PlaylistActionArea from \"./PlaylistActionArea\";\nimport TrackList from \"./TrackList\";\nimport PlaylistScrollBar from \"./PlaylistScrollBar\";\n\nimport { AppState } from \"../../types\";\nimport FocusTarget from \"../FocusTarget\";\nimport { useActionCreator, useTypedSelector } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\ninterface Props {\n  analyser: AnalyserNode;\n}\n\nfunction _maxTrackIndex(state: AppState) {\n  return state.playlist.trackOrder.length - 1;\n}\n\nfunction PlaylistWindow({ analyser }: Props) {\n  const offset = useTypedSelector(Selectors.getScrollOffset);\n  const getWindowSize = useTypedSelector(Selectors.getWindowSize);\n  const selectedWindow = useTypedSelector(Selectors.getFocusedWindow);\n  const getWindowShade = useTypedSelector(Selectors.getWindowShade);\n  const getWindowOpen = useTypedSelector(Selectors.getWindowOpen);\n  const maxTrackIndex = useTypedSelector(_maxTrackIndex);\n  const skinPlaylistStyle = useTypedSelector(Selectors.getSkinPlaylistStyle);\n  const getWindowPixelSize = useTypedSelector(Selectors.getWindowPixelSize);\n\n  const selected = selectedWindow === WINDOWS.PLAYLIST;\n  const playlistShade = Boolean(getWindowShade(WINDOWS.PLAYLIST));\n  const playlistSize = getWindowSize(WINDOWS.PLAYLIST);\n  const playlistWindowPixelSize = getWindowPixelSize(WINDOWS.PLAYLIST);\n\n  const close = useActionCreator(Actions.closeWindow);\n  const toggleShade = useActionCreator(Actions.togglePlaylistShadeMode);\n  const scrollUpFourTracks = useActionCreator(Actions.scrollUpFourTracks);\n  const scrollDownFourTracks = useActionCreator(Actions.scrollDownFourTracks);\n  const scrollPlaylistByDelta = useActionCreator(Actions.scrollPlaylistByDelta);\n  const loadMedia = useActionCreator(Actions.loadMedia);\n\n  const showVisualizer = playlistSize[0] > 2;\n  const activateVisualizer = !getWindowOpen(WINDOWS.MAIN);\n\n  const handleDrop = useCallback(\n    (\n      e: React.DragEvent<HTMLDivElement>,\n      targetCoords: { x: number; y: number }\n    ) => {\n      const top = e.clientY - targetCoords.y;\n      const atIndex = clamp(\n        offset + Math.round((top - 23) / TRACK_HEIGHT),\n        0,\n        maxTrackIndex + 1\n      );\n      loadMedia(e, LOAD_STYLE.NONE, atIndex);\n    },\n    [loadMedia, maxTrackIndex, offset]\n  );\n\n  if (playlistShade) {\n    return <PlaylistShade />;\n  }\n\n  const style = {\n    color: skinPlaylistStyle.normal,\n    backgroundColor: skinPlaylistStyle.normalbg,\n    fontFamily: `${skinPlaylistStyle.font}, Arial, sans-serif`,\n    height: `${playlistWindowPixelSize.height}px`,\n    width: `${playlistWindowPixelSize.width}px`,\n  };\n\n  const classes = classnames(\"window\", \"draggable\", { selected });\n\n  const showSpacers = playlistSize[0] % 2 === 0;\n\n  return (\n    <FocusTarget windowId={WINDOWS.PLAYLIST}>\n      <DropTarget\n        id=\"playlist-window\"\n        windowId={WINDOWS.PLAYLIST}\n        className={classes}\n        style={style}\n        handleDrop={handleDrop}\n        onWheelActive={scrollPlaylistByDelta}\n      >\n        <div className=\"playlist-top draggable\" onDoubleClick={toggleShade}>\n          <div className=\"playlist-top-left draggable\" />\n          {showSpacers && (\n            <div className=\"playlist-top-left-spacer draggable\" />\n          )}\n          <div className=\"playlist-top-left-fill draggable\" />\n          <div className=\"playlist-top-title draggable\" />\n          {showSpacers && (\n            <div className=\"playlist-top-right-spacer draggable\" />\n          )}\n          <div className=\"playlist-top-right-fill draggable\" />\n          <div className=\"playlist-top-right draggable\">\n            <WinampButton id=\"playlist-shade-button\" onClick={toggleShade} />\n            <WinampButton\n              id=\"playlist-close-button\"\n              onClick={() => close(WINDOWS.PLAYLIST)}\n            />\n          </div>\n        </div>\n        <div className=\"playlist-middle draggable\">\n          <div className=\"playlist-middle-left draggable\" />\n          <div className=\"playlist-middle-center\">\n            <TrackList />\n          </div>\n          <WinampButton className=\"playlist-middle-right draggable\">\n            <PlaylistScrollBar />\n          </WinampButton>\n        </div>\n        <div className=\"playlist-bottom draggable\">\n          <div className=\"playlist-bottom-left draggable\">\n            <AddMenu />\n            <RemoveMenu />\n            <SelectionMenu />\n            <MiscMenu />\n          </div>\n          <div className=\"playlist-bottom-center draggable\" />\n          <div className=\"playlist-bottom-right draggable\">\n            {showVisualizer && (\n              <div className=\"playlist-visualizer\">\n                {activateVisualizer && (\n                  <div className=\"visualizer-wrapper\">\n                    <Vis analyser={analyser} />\n                  </div>\n                )}\n              </div>\n            )}\n            <PlaylistActionArea />\n            <ListMenu />\n            <div id=\"playlist-scroll-up-button\" onClick={scrollUpFourTracks} />\n            <div\n              id=\"playlist-scroll-down-button\"\n              onClick={scrollDownFourTracks}\n            />\n            <PlaylistResizeTarget />\n          </div>\n        </div>\n      </DropTarget>\n    </FocusTarget>\n  );\n}\n\nexport default PlaylistWindow;\n","import { useMemo } from \"react\";\nimport { Slider as SliderType } from \"../../types\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport VerticalSlider from \"../VerticalSlider\";\nimport WinampButton from \"../WinampButton\";\n\ninterface Props {\n  id: string;\n  band: SliderType;\n  onChange(value: number): void;\n  clickOriginatedInEq?: boolean;\n}\n\nconst MAX_VALUE = 100;\n\n// Given a value between 1-100, return the sprite number (0-27)\nexport const spriteNumber = (value: number): number => {\n  const percent = value / MAX_VALUE;\n  return Math.round(percent * 27);\n};\n\n// Given a sprite number, return the x,y\nexport const spriteOffsets = (number: number): { x: number; y: number } => {\n  const x = number % 14;\n  const y = Math.floor(number / 14);\n  return { x, y };\n};\n\nconst Handle = () => {\n  const style = { width: 11, height: 11, marginLeft: 1 };\n  return <div style={style} className=\"slider-handle\" />;\n};\n\nexport default function Band({\n  id,\n  onChange,\n  band,\n  clickOriginatedInEq,\n}: Props) {\n  const sliders = useTypedSelector(Selectors.getSliders);\n  const value = sliders[band];\n  const backgroundPosition = useMemo(() => {\n    const { x, y } = spriteOffsets(spriteNumber(value));\n    const xOffset = x * 15; // Each sprite is 15px wide\n    const yOffset = y * 65; // Each sprite is 15px tall\n    return `-${xOffset}px -${yOffset}px`;\n  }, [value]);\n  const focusBand = useActionCreator(Actions.focusBand);\n  const unsetFocus = useActionCreator(Actions.unsetFocus);\n\n  // Note: The band background is actually one pixel taller (63) than the slider\n  // it contains (62).\n  return (\n    <WinampButton\n      id={id}\n      className=\"band\"\n      style={{ backgroundPosition, height: 63 }}\n      requireClicksOriginateLocally={\n        !(band !== \"preamp\" && clickOriginatedInEq)\n      }\n    >\n      <VerticalSlider\n        height={62}\n        width={14}\n        handleHeight={11}\n        value={1 - value / MAX_VALUE}\n        onBeforeChange={() => focusBand(band)}\n        onChange={(val) => onChange((1 - val) * MAX_VALUE)}\n        onAfterChange={unsetFocus}\n        requireClicksOriginateLocally={\n          !(band !== \"preamp\" && clickOriginatedInEq)\n        }\n        handle={<Handle />}\n      />\n    </WinampButton>\n  );\n}\n","import classnames from \"classnames\";\n\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport { useActionCreator, useTypedSelector } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nconst EqOn = () => {\n  const toggleEq = useActionCreator(Actions.toggleEq);\n  const on = useTypedSelector(Selectors.getEqualizerEnabled);\n  return (\n    <WinampButton\n      id=\"on\"\n      className={classnames({ selected: on })}\n      onClick={toggleEq}\n    />\n  );\n};\n\nexport default EqOn;\n","import { memo } from \"react\";\nimport classnames from \"classnames\";\n\nimport * as Actions from \"../../actionCreators\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nconst EqAuto = memo(() => {\n  const selected = useTypedSelector((state) => state.equalizer.auto);\n  const toggleAuto = useActionCreator(Actions.toggleEqAuto);\n  return (\n    <WinampButton\n      id=\"auto\"\n      className={classnames({ selected })}\n      onClick={toggleAuto}\n    />\n  );\n});\n\nexport default EqAuto;\n","// Adapted from https://github.com/morganherlocker/cubic-spline\n\nexport default function spline(xs, ys) {\n  const ks = getNaturalKs(xs, ys);\n  const maxX = xs[xs.length - 1];\n  const allYs = [];\n  let i = 1;\n  for (let x = 0; x <= maxX; x++) {\n    while (xs[i] < x) i++;\n    const t = (x - xs[i - 1]) / (xs[i] - xs[i - 1]);\n    const a = ks[i - 1] * (xs[i] - xs[i - 1]) - (ys[i] - ys[i - 1]);\n    const b = -ks[i] * (xs[i] - xs[i - 1]) + (ys[i] - ys[i - 1]);\n    const q =\n      (1 - t) * ys[i - 1] + t * ys[i] + t * (1 - t) * (a * (1 - t) + b * t);\n    allYs.push(q);\n  }\n  return allYs;\n}\n\nfunction getNaturalKs(xs, ys) {\n  const ks = xs.map(() => 0);\n  const n = xs.length - 1;\n  const matrix = zerosMatrix(n + 1, n + 2);\n\n  for (\n    let i = 1;\n    i < n;\n    i++ // rows\n  ) {\n    matrix[i][i - 1] = 1 / (xs[i] - xs[i - 1]);\n    matrix[i][i] = 2 * (1 / (xs[i] - xs[i - 1]) + 1 / (xs[i + 1] - xs[i]));\n    matrix[i][i + 1] = 1 / (xs[i + 1] - xs[i]);\n    matrix[i][n + 1] =\n      3 *\n      ((ys[i] - ys[i - 1]) / ((xs[i] - xs[i - 1]) * (xs[i] - xs[i - 1])) +\n        (ys[i + 1] - ys[i]) / ((xs[i + 1] - xs[i]) * (xs[i + 1] - xs[i])));\n  }\n\n  matrix[0][0] = 2 / (xs[1] - xs[0]);\n  matrix[0][1] = 1 / (xs[1] - xs[0]);\n  matrix[0][n + 1] =\n    (3 * (ys[1] - ys[0])) / ((xs[1] - xs[0]) * (xs[1] - xs[0]));\n\n  matrix[n][n - 1] = 1 / (xs[n] - xs[n - 1]);\n  matrix[n][n] = 2 / (xs[n] - xs[n - 1]);\n  matrix[n][n + 1] =\n    (3 * (ys[n] - ys[n - 1])) / ((xs[n] - xs[n - 1]) * (xs[n] - xs[n - 1]));\n\n  return solve(matrix, ks);\n}\n\nfunction solve(matrix, ks) {\n  const m = matrix.length;\n  // column\n  for (let k = 0; k < m; k++) {\n    // pivot for column\n    let iMax = 0;\n    let vali = Number.NEGATIVE_INFINITY;\n    for (let i = k; i < m; i++)\n      if (matrix[i][k] > vali) {\n        iMax = i;\n        vali = matrix[i][k];\n      }\n    swapRows(matrix, k, iMax);\n\n    // for all rows below pivot\n    for (let i = k + 1; i < m; i++) {\n      for (let j = k + 1; j < m + 1; j++)\n        matrix[i][j] =\n          matrix[i][j] - matrix[k][j] * (matrix[i][k] / matrix[k][k]);\n      matrix[i][k] = 0;\n    }\n  }\n  // rows = columns\n  for (let i = m - 1; i >= 0; i--) {\n    const v = matrix[i][m] / matrix[i][i];\n    ks[i] = v;\n    // rows\n    for (let j = i - 1; j >= 0; j--) {\n      matrix[j][m] -= matrix[j][i] * v;\n      matrix[j][i] = 0;\n    }\n  }\n  return ks;\n}\n\nfunction zerosMatrix(rows, columns) {\n  const matrix = [];\n  for (let i = 0; i < rows; i++) {\n    matrix.push([]);\n    for (let j = 0; j < columns; j++) {\n      matrix[i].push(0);\n    }\n  }\n  return matrix;\n}\n\nfunction swapRows(m, k, l) {\n  const p = m[k];\n  m[k] = m[l];\n  m[l] = p;\n}\n","import { useState, useMemo, useLayoutEffect } from \"react\";\nimport { percentToRange, clamp } from \"../../utils\";\nimport { BANDS } from \"../../constants\";\nimport spline from \"./spline\";\nimport * as Selectors from \"../../selectors\";\nimport { usePromiseValueOrNull, useTypedSelector } from \"../../hooks\";\nimport { Slider } from \"../../types\";\n\nconst GRAPH_HEIGHT = 19;\nconst GRAPH_WIDTH = 113;\n\nfunction EqGraph() {\n  const sliders = useTypedSelector(Selectors.getSliders);\n\n  const preampLineImagePromise = useTypedSelector(Selectors.getPreampLineImage);\n  const preampLineImage = usePromiseValueOrNull(preampLineImagePromise);\n\n  const [canvasNode, setCanvasNode] = useState<HTMLCanvasElement | null>(null);\n\n  const canvasCtx = useMemo(\n    () => canvasNode?.getContext(\"2d\") ?? null,\n    [canvasNode]\n  );\n  const colorPattern = useColorPattern(canvasCtx);\n\n  useLayoutEffect(() => {\n    if (\n      canvasCtx == null ||\n      canvasNode == null ||\n      preampLineImage == null ||\n      colorPattern == null\n    ) {\n      return;\n    }\n    const width = Number(canvasNode.width);\n    const height = Number(canvasNode.height);\n    canvasCtx.clearRect(0, 0, width, height);\n    drawEqLine({ colorPattern, sliders, canvasCtx, preampLineImage });\n  }, [canvasCtx, canvasNode, colorPattern, preampLineImage, sliders]);\n\n  return (\n    <canvas\n      id=\"eqGraph\"\n      ref={setCanvasNode}\n      width={GRAPH_WIDTH}\n      height={GRAPH_HEIGHT}\n    />\n  );\n}\n\nfunction useColorPattern(canvasCtx: CanvasRenderingContext2D | null) {\n  const lineColorsImagePromise = useTypedSelector(Selectors.getLineColorsImage);\n  const lineColorsImage = usePromiseValueOrNull(lineColorsImagePromise);\n  return useMemo(() => {\n    if (canvasCtx == null || lineColorsImage == null) {\n      return null;\n    }\n    return canvasCtx.createPattern(lineColorsImage, \"repeat-x\");\n  }, [canvasCtx, lineColorsImage]);\n}\n\nfunction drawEqLine({\n  colorPattern,\n  sliders,\n  canvasCtx,\n  preampLineImage,\n}: {\n  sliders: Record<Slider, number>;\n  colorPattern: CanvasPattern;\n  preampLineImage: HTMLImageElement;\n  canvasCtx: CanvasRenderingContext2D;\n}) {\n  const preampValue = percentToRange(sliders.preamp / 100, 0, GRAPH_HEIGHT - 1);\n  canvasCtx.drawImage(\n    preampLineImage,\n    0,\n    preampValue,\n    preampLineImage.width,\n    preampLineImage.height\n  );\n\n  const amplitudes = BANDS.map((band) => sliders[band]);\n\n  canvasCtx.fillStyle = colorPattern;\n  const paddingLeft = 2; // TODO: This should be 1.5\n\n  const min = 0;\n  const max = GRAPH_HEIGHT - 1;\n\n  const xs: number[] = [];\n  const ys: number[] = [];\n  amplitudes.forEach((value, i) => {\n    const percent = (100 - value) / 100;\n    // Each band is 12 pixels widex\n    xs.push(i * 12);\n    ys.push(percentToRange(percent, min, max));\n  });\n\n  const allYs = spline(xs, ys);\n\n  const maxX = xs[xs.length - 1];\n  let lastY = ys[0];\n  for (let x = 0; x <= maxX; x++) {\n    const y = clamp(Math.round(allYs[x]), 0, GRAPH_HEIGHT - 1);\n    const yTop = Math.min(y, lastY);\n    const height = 1 + Math.abs(lastY - y);\n    canvasCtx.fillRect(paddingLeft + x, yTop, 1, height);\n    lastY = y;\n  }\n}\n\nexport default EqGraph;\n","import builtin from \"../../../presets/builtin.json\";\nimport * as Actions from \"../../actionCreators\";\nimport { Node, Parent, Hr } from \"../ContextMenu\";\nimport ContextMenuTarget from \"../ContextMenuTarget\";\nimport { useActionCreator } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nconst PresetsContextMenu = () => {\n  const openEqfFileDialog = useActionCreator(Actions.openEqfFileDialog);\n  const downloadPreset = useActionCreator(Actions.downloadPreset);\n  const setEqFromObject = useActionCreator(Actions.setEqFromObject);\n  return (\n    <ContextMenuTarget\n      top\n      id=\"presets-context\"\n      renderMenu={() => (\n        <>\n          <Parent label=\"Load\">\n            {builtin.presets.map((preset) => (\n              <Node\n                key={preset.name}\n                onClick={() => setEqFromObject(preset)}\n                label={preset.name}\n              />\n            ))}\n            <Hr />\n            <Node onClick={openEqfFileDialog} label=\"From Eqf...\" />\n          </Parent>\n          <Node onClick={downloadPreset} label=\"Save\" />\n        </>\n      )}\n    >\n      <WinampButton id=\"presets\" />\n    </ContextMenuTarget>\n  );\n};\n\nexport default PresetsContextMenu;\n","import ClickedDiv from \"../ClickedDiv\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport { WINDOWS } from \"../../constants\";\nimport WinampButton from \"../WinampButton\";\n\nexport default function EqTitleButtons() {\n  const focusedWindow = useTypedSelector(Selectors.getFocusedWindow);\n\n  const selected = focusedWindow === WINDOWS.EQUALIZER;\n  const closeWindow = useActionCreator(Actions.closeWindow);\n  const toggleEqualizerShadeMode = useActionCreator(\n    Actions.toggleEqualizerShadeMode\n  );\n  return (\n    <ClickedDiv id=\"eq-buttons\" key={selected ? \"selected\" : \"unselected\"}>\n      <WinampButton id=\"equalizer-shade\" onClick={toggleEqualizerShadeMode} />\n      <WinampButton\n        id=\"equalizer-close\"\n        onClick={() => closeWindow(WINDOWS.EQUALIZER)}\n      />\n    </ClickedDiv>\n  );\n}\n","import Volume from \"../Volume\";\nimport Balance from \"../Balance\";\nimport { segment } from \"../../utils\";\nimport EqTitleButtons from \"./EqTitleButtons\";\n\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\n\nconst EqualizerShade = () => {\n  const volume = useTypedSelector(Selectors.getVolume);\n  const balance = useTypedSelector(Selectors.getBalance);\n  const toggleEqualizerShadeMode = useActionCreator(\n    Actions.toggleEqualizerShadeMode\n  );\n\n  const classes = [\"left\", \"center\", \"right\"];\n  const eqVolumeClassName = segment(0, 100, volume, classes);\n  const eqBalanceClassName = segment(-100, 100, balance, classes);\n  return (\n    <div\n      className=\"draggable\"\n      onDoubleClick={toggleEqualizerShadeMode}\n      style={{ width: \"100%\", height: \"100%\" }}\n    >\n      <EqTitleButtons />\n      <Volume id=\"equalizer-volume\" className={eqVolumeClassName} />\n      <Balance id=\"equalizer-balance\" className={eqBalanceClassName} />\n    </div>\n  );\n};\nexport default EqualizerShade;\n","import { useState } from \"react\";\nimport classnames from \"classnames\";\n\nimport { BANDS, WINDOWS } from \"../../constants\";\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\n\nimport Band from \"./Band\";\nimport EqOn from \"./EqOn\";\nimport EqAuto from \"./EqAuto\";\nimport EqGraph from \"./EqGraph\";\nimport PresetsContextMenu from \"./PresetsContextMenu\";\nimport EqualizerShade from \"./EqualizerShade\";\n\nimport { Band as BandType } from \"../../types\";\nimport FocusTarget from \"../FocusTarget\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport EqTitleButtons from \"./EqTitleButtons\";\n\nconst bandClassName = (band: BandType) => `band-${band}`;\n\nconst EqualizerWindow = () => {\n  const doubled = useTypedSelector(Selectors.getDoubled);\n  const focusedWindow = useTypedSelector(Selectors.getFocusedWindow);\n  const getWindowShade = useTypedSelector(Selectors.getWindowShade);\n\n  const selected = focusedWindow === WINDOWS.EQUALIZER;\n  const shade = getWindowShade(WINDOWS.EQUALIZER);\n\n  const setPreampValue = useActionCreator(Actions.setPreamp);\n  const setEqToMin = useActionCreator(Actions.setEqToMin);\n  const setEqToMid = useActionCreator(Actions.setEqToMid);\n  const setEqToMax = useActionCreator(Actions.setEqToMax);\n  const setHertzValue = useActionCreator(Actions.setEqBand);\n  const toggleEqualizerShadeMode = useActionCreator(\n    Actions.toggleEqualizerShadeMode\n  );\n\n  const className = classnames({\n    selected,\n    doubled,\n    shade,\n    window: true,\n    draggable: true,\n  });\n\n  // Track whether the click originated in the \"hertz\" area of the EQ\n  // We only want to allow drag across the EQ when the click originated in that area\n  const [clickOriginatedInEq, setClickOriginatedInEq] = useState(false);\n\n  const onPointerDownHz = (e: React.PointerEvent<HTMLDivElement>) => {\n    e.stopPropagation();\n    // Release the pointer capture\n    // https://w3c.github.io/pointerevents/#implicit-pointer-capture\n    // https://w3c.github.io/pointerevents/#pointer-capture\n    const target = e.target as HTMLDivElement;\n    target.releasePointerCapture(e.pointerId);\n\n    setClickOriginatedInEq(true);\n\n    function onReleaseHz(ee: PointerEvent) {\n      // Release only if it is the actual pointer release, not the simulated one coming from WinampButton\n      // Simulated pointer release coming from WinampButton has ee.detail == -42\n      // Actual pointer release here will come in as ee.detail === 0\n      if (ee.detail === 0) {\n        setClickOriginatedInEq(false);\n        document.removeEventListener(\"pointerup\", onReleaseHz);\n      }\n    }\n    document.addEventListener(\"pointerup\", onReleaseHz);\n  };\n\n  return (\n    <div id=\"equalizer-window\" className={className}>\n      <FocusTarget windowId={WINDOWS.EQUALIZER}>\n        {shade ? (\n          <EqualizerShade />\n        ) : (\n          <div>\n            <div\n              className=\"equalizer-top title-bar draggable\"\n              onDoubleClick={toggleEqualizerShadeMode}\n            >\n              <EqTitleButtons />\n            </div>\n            <EqOn />\n            <EqAuto />\n            <EqGraph />\n            <PresetsContextMenu />\n            <Band id=\"preamp\" band=\"preamp\" onChange={setPreampValue} />\n            <div id=\"plus12db\" onClick={setEqToMax} />\n            <div id=\"zerodb\" onClick={setEqToMid} />\n            <div id=\"minus12db\" onClick={setEqToMin} />\n            <div onPointerDown={onPointerDownHz}>\n              {BANDS.map((hertz) => (\n                <Band\n                  key={hertz}\n                  id={bandClassName(hertz)}\n                  band={hertz}\n                  onChange={(value) => setHertzValue(hertz, value)}\n                  clickOriginatedInEq={clickOriginatedInEq}\n                />\n              ))}\n            </div>\n          </div>\n        )}\n      </FocusTarget>\n    </div>\n  );\n};\nexport default EqualizerWindow;\n","import { LETTERS } from \"./constants\";\nimport { FONT_LOOKUP, imageConstFromChar } from \"./skinSprites\";\n\ninterface Selectors {\n  [name: string]: string[];\n}\n\nexport const imageSelectors: Selectors = {\n  MAIN_BALANCE_BACKGROUND: [\"#balance\"],\n  MAIN_BALANCE_THUMB: [\n    \"#balance::-webkit-slider-thumb\",\n    \"#balance::-moz-range-thumb\",\n  ],\n  MAIN_BALANCE_THUMB_ACTIVE: [\n    \"#balance:active::-webkit-slider-thumb\",\n    \"#balance:active::-moz-range-thumb\",\n  ],\n  MAIN_PREVIOUS_BUTTON: [\".actions #previous\"],\n  MAIN_PREVIOUS_BUTTON_ACTIVE: [\".actions #previous.winamp-active\"],\n  MAIN_PLAY_BUTTON: [\".actions #play\"],\n  MAIN_PLAY_BUTTON_ACTIVE: [\".actions #play.winamp-active\"],\n  MAIN_PAUSE_BUTTON: [\".actions #pause\"],\n  MAIN_PAUSE_BUTTON_ACTIVE: [\".actions #pause.winamp-active\"],\n  MAIN_STOP_BUTTON: [\".actions #stop\"],\n  MAIN_STOP_BUTTON_ACTIVE: [\".actions #stop.winamp-active\"],\n  MAIN_NEXT_BUTTON: [\".actions #next\"],\n  MAIN_NEXT_BUTTON_ACTIVE: [\".actions #next.winamp-active\"],\n  MAIN_EJECT_BUTTON: [\"#eject\"],\n  MAIN_EJECT_BUTTON_ACTIVE: [\"#eject.winamp-active\"],\n  MAIN_WINDOW_BACKGROUND: [\"#main-window\"],\n  MAIN_STEREO: [\".media-info #stereo\", \".stop .media-info #stereo.selected\"],\n  MAIN_STEREO_SELECTED: [\".media-info #stereo.selected\"],\n  MAIN_MONO: [\".media-info #mono\", \".stop .media-info #mono.selected\"],\n  MAIN_MONO_SELECTED: [\".media-info #mono.selected\"],\n  NO_MINUS_SIGN: [\"#time #minus-sign\"],\n  MINUS_SIGN: [\"#time.countdown #minus-sign\"],\n  DIGIT_0: [\".digit-0\"],\n  DIGIT_1: [\".digit-1\"],\n  DIGIT_2: [\".digit-2\"],\n  DIGIT_3: [\".digit-3\"],\n  DIGIT_4: [\".digit-4\"],\n  DIGIT_5: [\".digit-5\"],\n  DIGIT_6: [\".digit-6\"],\n  DIGIT_7: [\".digit-7\"],\n  DIGIT_8: [\".digit-8\"],\n  DIGIT_9: [\".digit-9\"],\n  NO_MINUS_SIGN_EX: [\"#time #minus-sign\"],\n  MINUS_SIGN_EX: [\"#time.countdown #minus-sign\"],\n  DIGIT_0_EX: [\".digit-0\"],\n  DIGIT_1_EX: [\".digit-1\"],\n  DIGIT_2_EX: [\".digit-2\"],\n  DIGIT_3_EX: [\".digit-3\"],\n  DIGIT_4_EX: [\".digit-4\"],\n  DIGIT_5_EX: [\".digit-5\"],\n  DIGIT_6_EX: [\".digit-6\"],\n  DIGIT_7_EX: [\".digit-7\"],\n  DIGIT_8_EX: [\".digit-8\"],\n  DIGIT_9_EX: [\".digit-9\"],\n  MAIN_PLAYING_INDICATOR: [\".play #play-pause\"],\n  MAIN_PAUSED_INDICATOR: [\".pause #play-pause\"],\n  MAIN_STOPPED_INDICATOR: [\".stop #play-pause\"],\n  MAIN_NOT_WORKING_INDICATOR: [\"#work-indicator\"],\n  MAIN_WORKING_INDICATOR: [\"#work-indicator.selected\"],\n  PLAYLIST_TOP_TILE: [\n    \".playlist-top-left-fill\",\n    \".playlist-top-left-spacer\",\n    \".playlist-top-right-fill\",\n    \".playlist-top-right-spacer\",\n  ],\n  PLAYLIST_TOP_LEFT_CORNER: [\".playlist-top-left\"],\n  PLAYLIST_TITLE_BAR: [\".playlist-top-title\"],\n  PLAYLIST_TOP_RIGHT_CORNER: [\".playlist-top-right\"],\n  PLAYLIST_TOP_TILE_SELECTED: [\n    \".selected .playlist-top-left-fill\",\n    \".selected .playlist-top-left-spacer\",\n    \".selected .playlist-top-right-fill\",\n    \".selected .playlist-top-right-spacer\",\n  ],\n  PLAYLIST_TOP_LEFT_SELECTED: [\".selected .playlist-top-left\"],\n  PLAYLIST_TITLE_BAR_SELECTED: [\".selected .playlist-top-title\"],\n  PLAYLIST_TOP_RIGHT_CORNER_SELECTED: [\".selected .playlist-top-right\"],\n  PLAYLIST_LEFT_TILE: [\".playlist-middle-left\"],\n  PLAYLIST_RIGHT_TILE: [\".playlist-middle-right\"],\n  PLAYLIST_SCROLL_HANDLE: [\".playlist-scrollbar-handle\"],\n  PLAYLIST_SCROLL_HANDLE_SELECTED: [\n    \".playlist-middle-right.winamp-active .playlist-scrollbar-handle\",\n  ],\n  PLAYLIST_BOTTOM_TILE: [\".playlist-bottom\"],\n  PLAYLIST_BOTTOM_LEFT_CORNER: [\".playlist-bottom-left\"],\n  PLAYLIST_BOTTOM_RIGHT_CORNER: [\".playlist-bottom-right\"],\n  PLAYLIST_VISUALIZER_BACKGROUND: [\".playlist-visualizer\"],\n  PLAYLIST_SHADE_BACKGROUND: [\"#playlist-window-shade\"],\n  PLAYLIST_SHADE_BACKGROUND_LEFT: [\"#playlist-window-shade .left\"],\n  PLAYLIST_SHADE_BACKGROUND_RIGHT: [\"#playlist-window-shade .right\"],\n  PLAYLIST_SHADE_BACKGROUND_RIGHT_SELECTED: [\n    \"#playlist-window-shade.selected .right\",\n  ],\n\n  PLAYLIST_ADD_MENU_BAR: [\"#playlist-add-menu.selected .bar\"],\n  PLAYLIST_ADD_URL: [\"#playlist-add-menu .add-url\"],\n  PLAYLIST_ADD_URL_SELECTED: [\"#playlist-add-menu .hover .add-url\"],\n  PLAYLIST_ADD_DIR: [\"#playlist-add-menu .add-dir\"],\n  PLAYLIST_ADD_DIR_SELECTED: [\"#playlist-add-menu .hover .add-dir\"],\n  PLAYLIST_ADD_FILE: [\"#playlist-add-menu .add-file\"],\n  PLAYLIST_ADD_FILE_SELECTED: [\"#playlist-add-menu .hover .add-file\"],\n\n  PLAYLIST_REMOVE_MENU_BAR: [\"#playlist-remove-menu.selected .bar\"],\n  PLAYLIST_REMOVE_ALL: [\"#playlist-remove-menu .remove-all\"],\n  PLAYLIST_REMOVE_ALL_SELECTED: [\"#playlist-remove-menu .hover .remove-all\"],\n  PLAYLIST_CROP: [\"#playlist-remove-menu .crop\"],\n  PLAYLIST_CROP_SELECTED: [\"#playlist-remove-menu .hover .crop\"],\n  PLAYLIST_REMOVE_SELECTED: [\"#playlist-remove-menu .remove-selected\"],\n  PLAYLIST_REMOVE_SELECTED_SELECTED: [\n    \"#playlist-remove-menu .hover .remove-selected\",\n  ],\n  PLAYLIST_REMOVE_MISC: [\"#playlist-remove-menu .remove-misc\"],\n  PLAYLIST_REMOVE_MISC_SELECTED: [\"#playlist-remove-menu .hover .remove-misc\"],\n\n  PLAYLIST_SELECT_MENU_BAR: [\"#playlist-selection-menu.selected .bar\"],\n  PLAYLIST_INVERT_SELECTION: [\"#playlist-selection-menu .invert-selection\"],\n  PLAYLIST_INVERT_SELECTION_SELECTED: [\n    \"#playlist-selection-menu .hover .invert-selection\",\n  ],\n  PLAYLIST_SELECT_ZERO: [\"#playlist-selection-menu .select-zero\"],\n  PLAYLIST_SELECT_ZERO_SELECTED: [\n    \"#playlist-selection-menu .hover .select-zero\",\n  ],\n  PLAYLIST_SELECT_ALL: [\"#playlist-selection-menu .select-all\"],\n  PLAYLIST_SELECT_ALL_SELECTED: [\"#playlist-selection-menu .hover .select-all\"],\n  PLAYLIST_CLOSE_SELECTED: [\"#playlist-close-button.winamp-active\"],\n  PLAYLIST_COLLAPSE_SELECTED: [\n    \"#playlist-window #playlist-shade-button.winamp-active\",\n  ],\n  PLAYLIST_EXPAND_SELECTED: [\n    \"#playlist-window-shade #playlist-shade-button.winamp-active\",\n  ],\n\n  PLAYLIST_MISC_MENU_BAR: [\"#playlist-misc-menu.selected .bar\"],\n  PLAYLIST_MISC_OPTIONS: [\"#playlist-misc-menu .misc-options\"],\n  PLAYLIST_MISC_OPTIONS_SELECTED: [\"#playlist-misc-menu .hover .misc-options\"],\n  PLAYLIST_FILE_INFO: [\"#playlist-misc-menu .file-info\"],\n  PLAYLIST_FILE_INFO_SELECTED: [\"#playlist-misc-menu .hover .file-info\"],\n  PLAYLIST_SORT_LIST: [\"#playlist-misc-menu .sort-list\"],\n  PLAYLIST_SORT_LIST_SELECTED: [\"#playlist-misc-menu .hover .sort-list\"],\n\n  PLAYLIST_LIST_BAR: [\"#playlist-list-menu.selected .bar\"],\n  PLAYLIST_NEW_LIST: [\"#playlist-list-menu .new-list\"],\n  PLAYLIST_NEW_LIST_SELECTED: [\"#playlist-list-menu .hover .new-list\"],\n  PLAYLIST_LOAD_LIST: [\"#playlist-list-menu .load-list\"],\n  PLAYLIST_LOAD_LIST_SELECTED: [\"#playlist-list-menu .hover .load-list\"],\n  PLAYLIST_SAVE_LIST: [\"#playlist-list-menu .save-list\"],\n  PLAYLIST_SAVE_LIST_SELECTED: [\"#playlist-list-menu .hover .save-list\"],\n\n  EQ_WINDOW_BACKGROUND: [\"#equalizer-window:not(.shade)\"],\n  EQ_TITLE_BAR: [\".equalizer-top\"],\n  EQ_TITLE_BAR_SELECTED: [\".selected .equalizer-top\"],\n  EQ_SLIDER_BACKGROUND: [\".band\"],\n  EQ_SLIDER_THUMB: [\".band .slider-handle\"],\n  // Put the \"active\" pseudo selector on the parent, since clicking\n  // anywhere on the track moves the slider.\n  EQ_SLIDER_THUMB_SELECTED: [\".band.winamp-active .slider-handle\"],\n  EQ_ON_BUTTON: [\"#on\"],\n  EQ_ON_BUTTON_DEPRESSED: [\"#on.winamp-active\"],\n  EQ_ON_BUTTON_SELECTED: [\"#on.selected\"],\n  EQ_ON_BUTTON_SELECTED_DEPRESSED: [\"#on.selected.winamp-active\"],\n  EQ_AUTO_BUTTON: [\"#auto\"],\n  EQ_AUTO_BUTTON_DEPRESSED: [\"#auto.winamp-active\"],\n  EQ_AUTO_BUTTON_SELECTED: [\"#auto.selected\"],\n  EQ_AUTO_BUTTON_SELECTED_DEPRESSED: [\"#auto.selected.winamp-active\"],\n  EQ_GRAPH_BACKGROUND: [\"#eqGraph\"],\n  EQ_PRESETS_BUTTON: [\"#presets\"],\n  EQ_PRESETS_BUTTON_SELECTED: [\"#presets.winamp-active\"],\n  EQ_PREAMP_LINE: [\"#preamp-line\"],\n  EQ_SHADE_BACKGROUND: [\"#equalizer-window.shade\"],\n  EQ_SHADE_BACKGROUND_SELECTED: [\"#equalizer-window.shade.selected\"],\n  EQ_SHADE_VOLUME_SLIDER_LEFT: [\n    \"#equalizer-volume.left::-webkit-slider-thumb\",\n    \"#equalizer-volume.left::-moz-range-thumb\",\n  ],\n  EQ_SHADE_VOLUME_SLIDER_CENTER: [\n    \"#equalizer-volume.center::-webkit-slider-thumb\",\n    \"#equalizer-volume.center::-moz-range-thumb\",\n  ],\n  EQ_SHADE_VOLUME_SLIDER_RIGHT: [\n    \"#equalizer-volume.right::-webkit-slider-thumb\",\n    \"#equalizer-volume.right::-moz-range-thumb\",\n  ],\n  EQ_SHADE_BALANCE_SLIDER_LEFT: [\n    \"#equalizer-balance.left::-webkit-slider-thumb\",\n    \"#equalizer-balance.left::-moz-range-thumb\",\n  ],\n  EQ_SHADE_BALANCE_SLIDER_CENTER: [\n    \"#equalizer-balance.center::-webkit-slider-thumb\",\n    \"#equalizer-balance.center::-moz-range-thumb\",\n  ],\n  EQ_SHADE_BALANCE_SLIDER_RIGHT: [\n    \"#equalizer-balance.right::-webkit-slider-thumb\",\n    \"#equalizer-balance.right::-moz-range-thumb\",\n  ],\n  EQ_MAXIMIZE_BUTTON_ACTIVE: [\"#equalizer-shade.winamp-active\"],\n  EQ_MINIMIZE_BUTTON_ACTIVE: [\n    \"#equalizer-window.shade #equalizer-shade.winamp-active\",\n  ],\n  EQ_CLOSE_BUTTON: [\n    \"#equalizer-window.selected #eq-buttons.clicked #equalizer-close\",\n  ],\n  EQ_CLOSE_BUTTON_ACTIVE: [\n    \"#equalizer-window.selected #eq-buttons.clicked #equalizer-close.winamp-active\",\n  ],\n  EQ_SHADE_CLOSE_BUTTON: [\n    \"#equalizer-window.shade.selected #eq-buttons.clicked #equalizer-close\",\n  ],\n  EQ_SHADE_CLOSE_BUTTON_ACTIVE: [\n    \"#equalizer-window.shade.selected #eq-buttons.clicked #equalizer-close.winamp-active\",\n  ],\n  MAIN_POSITION_SLIDER_BACKGROUND: [\"#position\"],\n  MAIN_POSITION_SLIDER_THUMB: [\n    \"#position::-webkit-slider-thumb\",\n    \"#position::-moz-range-thumb\",\n  ],\n  MAIN_POSITION_SLIDER_THUMB_SELECTED: [\n    \"#position:active::-webkit-slider-thumb\",\n    \"#position:active::-moz-range-thumb\",\n  ],\n  MAIN_SHUFFLE_BUTTON: [\"#shuffle\"],\n  MAIN_SHUFFLE_BUTTON_DEPRESSED: [\"#shuffle.winamp-active\"],\n  MAIN_SHUFFLE_BUTTON_SELECTED: [\"#shuffle.selected\"],\n  MAIN_SHUFFLE_BUTTON_SELECTED_DEPRESSED: [\"#shuffle.selected.winamp-active\"],\n  MAIN_REPEAT_BUTTON: [\"#repeat\"],\n  MAIN_REPEAT_BUTTON_DEPRESSED: [\"#repeat.winamp-active\"],\n  MAIN_REPEAT_BUTTON_SELECTED: [\"#repeat.selected\"],\n  MAIN_REPEAT_BUTTON_SELECTED_DEPRESSED: [\"#repeat.selected.winamp-active\"],\n  MAIN_EQ_BUTTON: [\"#equalizer-button\"],\n  MAIN_EQ_BUTTON_SELECTED: [\"#equalizer-button.selected\"],\n  MAIN_EQ_BUTTON_DEPRESSED: [\"#equalizer-button.winamp-active\"],\n  MAIN_EQ_BUTTON_DEPRESSED_SELECTED: [\n    \"#equalizer-button.selected.winamp-button\",\n  ],\n  MAIN_PLAYLIST_BUTTON: [\"#playlist-button\"],\n  MAIN_PLAYLIST_BUTTON_SELECTED: [\"#playlist-button.selected\"],\n  MAIN_PLAYLIST_BUTTON_DEPRESSED: [\"#playlist-button.winamp-active\"],\n  MAIN_PLAYLIST_BUTTON_DEPRESSED_SELECTED: [\n    \"#playlist-button.selected.winamp-active\",\n  ],\n  MAIN_TITLE_BAR: [\"#title-bar\"],\n  MAIN_TITLE_BAR_SELECTED: [\".selected #title-bar\"],\n  MAIN_EASTER_EGG_TITLE_BAR: [\".llama #title-bar\"],\n  MAIN_EASTER_EGG_TITLE_BAR_SELECTED: [\".llama.selected #title-bar\"],\n  MAIN_OPTIONS_BUTTON: [\".selected #title-bar #option.clicked\"],\n  MAIN_OPTIONS_BUTTON_DEPRESSED: [\n    \".selected #title-bar #option:active\",\n    \".selected #title-bar #option.selected\",\n  ],\n  MAIN_MINIMIZE_BUTTON: [\".selected #title-bar #minimize.clicked\"],\n  MAIN_MINIMIZE_BUTTON_DEPRESSED: [\n    \".selected #title-bar #minimize.winamp-active\",\n  ],\n  MAIN_SHADE_BUTTON: [\".selected #title-bar #shade.clicked\"],\n  MAIN_SHADE_BUTTON_DEPRESSED: [\".selected #title-bar #shade.winamp-active\"],\n  MAIN_CLOSE_BUTTON: [\".selected #title-bar #close.clicked\"],\n  MAIN_CLOSE_BUTTON_DEPRESSED: [\".selected #title-bar #close.winamp-active\"],\n  MAIN_CLUTTER_BAR_BACKGROUND: [\"#clutter-bar\"],\n  MAIN_CLUTTER_BAR_BACKGROUND_DISABLED: [\"#clutter-bar.disabled\"],\n  MAIN_CLUTTER_BAR_BUTTON_O_SELECTED: [\n    \"#button-o:active\",\n    \"#button-0.selected\",\n  ],\n  MAIN_CLUTTER_BAR_BUTTON_A_SELECTED: [\n    \"#button-a:active\",\n    \"#button-a.selected\",\n  ],\n  MAIN_CLUTTER_BAR_BUTTON_I_SELECTED: [\n    \"#button-i:active\",\n    \"#button-i.selected\",\n  ],\n  MAIN_CLUTTER_BAR_BUTTON_D_SELECTED: [\n    \"#button-d:active\",\n    \"#button-d.selected\",\n  ],\n  MAIN_CLUTTER_BAR_BUTTON_V_SELECTED: [\n    \"#button-v:active\",\n    \"#button-v.selected\",\n  ],\n  MAIN_SHADE_BACKGROUND: [\".shade #title-bar\"],\n  MAIN_SHADE_BACKGROUND_SELECTED: [\".shade.selected #title-bar\"],\n  MAIN_SHADE_BUTTON_SELECTED: [\".shade.selected #title-bar #shade\"],\n  MAIN_SHADE_BUTTON_SELECTED_DEPRESSED: [\n    \".shade #title-bar #shade.winamp-active\",\n  ],\n  MAIN_SHADE_POSITION_BACKGROUND: [\".shade #position\"],\n  MAIN_SHADE_POSITION_THUMB: [\n    \".shade #position::-moz-range-thumb\",\n    \".shade #position::-webkit-slider-thumb\",\n  ],\n  MAIN_SHADE_POSITION_THUMB_LEFT: [\n    \".shade #position.left::-moz-range-thumb\",\n    \".shade #position.left::-webkit-slider-thumb\",\n  ],\n  MAIN_SHADE_POSITION_THUMB_RIGHT: [\n    \".shade #position.right::-moz-range-thumb\",\n    \".shade #position.right::-webkit-slider-thumb\",\n  ],\n  MAIN_VOLUME_BACKGROUND: [\"#volume\"],\n  MAIN_VOLUME_THUMB: [\n    \"#volume input::-webkit-slider-thumb\",\n    \"#volume input::-moz-range-thumb\",\n  ],\n  MAIN_VOLUME_THUMB_SELECTED: [\n    \"#volume input:active::-webkit-slider-thumb\",\n    \"#volume input:active::-moz-range-thumb\",\n  ],\n  GEN_TOP_CENTER_FILL: [\".gen-window .gen-top\"],\n  GEN_TOP_LEFT: [\".gen-window .gen-top-left\"],\n  GEN_TOP_LEFT_END: [\".gen-window .gen-top-left-end\"],\n  GEN_TOP_RIGHT: [\".gen-window .gen-top-right\"],\n  GEN_TOP_RIGHT_END: [\".gen-window .gen-top-right-end\"],\n  GEN_TOP_LEFT_RIGHT_FILL: [\n    \".gen-window .gen-top-left-fill\",\n    \".gen-window .gen-top-right-fill\",\n  ],\n\n  GEN_TOP_CENTER_FILL_SELECTED: [\".gen-window.selected .gen-top\"],\n  GEN_TOP_LEFT_SELECTED: [\".gen-window.selected .gen-top-left\"],\n  GEN_TOP_LEFT_END_SELECTED: [\".gen-window.selected .gen-top-left-end\"],\n  GEN_TOP_RIGHT_SELECTED: [\".gen-window.selected .gen-top-right\"],\n  GEN_TOP_RIGHT_END_SELECTED: [\".gen-window.selected .gen-top-right-end\"],\n  GEN_TOP_LEFT_RIGHT_FILL_SELECTED: [\n    \".gen-window.selected .gen-top-left-fill\",\n    \".gen-window.selected .gen-top-right-fill\",\n  ],\n  GEN_BOTTOM_LEFT: [\".gen-window .gen-bottom-left\"],\n  GEN_BOTTOM_RIGHT: [\".gen-window .gen-bottom-right\"],\n  GEN_BOTTOM_FILL: [\".gen-window .gen-bottom\"],\n  GEN_MIDDLE_LEFT: [\".gen-window .gen-middle-left\"],\n  GEN_MIDDLE_LEFT_BOTTOM: [\".gen-window .gen-middle-left-bottom\"],\n  GEN_MIDDLE_RIGHT: [\".gen-window .gen-middle-right\"],\n  GEN_MIDDLE_RIGHT_BOTTOM: [\".gen-window .gen-middle-right-bottom\"],\n  GEN_CLOSE_SELECTED: [\".gen-window .gen-close.winamp-active\"],\n};\n\nObject.keys(FONT_LOOKUP).forEach((character) => {\n  const key = imageConstFromChar(character);\n  const code = character.charCodeAt(0);\n  imageSelectors[key] = [`.character-${code}`];\n});\n\nLETTERS.forEach((character) => {\n  imageSelectors[`GEN_TEXT_${character}`] = [\n    `.gen-text-${character.toLowerCase()}`,\n  ];\n  imageSelectors[`GEN_TEXT_SELECTED_${character}`] = [\n    `.gen-window.selected .gen-text-${character.toLowerCase()}`,\n  ];\n});\n\nexport const cursorSelectors: Selectors = {\n  CLOSE: [\"#title-bar #close\"],\n  // This is not quite right. There are some areas that show this cursor\n  // but are not clickable.\n  EQSLID: [\"#equalizer-window .band\"],\n  EQNORMAL: [\"#equalizer-window\"],\n  EQCLOSE: [\"#equalizer-window #equalizer-close\"],\n  EQTITLE: [\n    \"#equalizer-window .title-bar\",\n    \"#equalizer-window.shade\",\n    \"#equalizer-window.shade input\",\n  ],\n  MAINMENU: [\"#main-window #option\", \"#webamp-context-menu .context-menu\"],\n  MIN: [\"#main-window #minimize\"],\n  NORMAL: [\n    // Use this as the default cursor.\n    \".window\",\n    \".window input\", // Otherwise\n    \"#main-window\",\n    \"#main-window.shade #title-bar\",\n  ],\n  MMENU: [\"#main-window.shade #option\"],\n  PNORMAL: [\"#playlist-window\"],\n  // TODO: This is should really only apply to the top part of the top.\n  // The chrome around the playlist window is larger than others. The\n  // cursor only applies to the same height as the other window's chrome.\n  PTBAR: [\"#playlist-window .playlist-top\"],\n  PCLOSE: [\n    \"#playlist-window #playlist-close-button\",\n    \"#playlist-window-shade #playlist-close-button\",\n  ],\n  PWINBUT: [\n    \"#playlist-window #playlist-shade-button\",\n    \"#playlist-window-shade #playlist-shade-button\",\n  ],\n  POSBAR: [\"#main-window #position\"],\n  PSIZE: [\"#playlist-window #playlist-resize-target\"],\n  PWSSIZE: [\"#playlist-window-shade #playlist-resize-target\"],\n  PWSNORM: [\"#playlist-window-shade\"],\n  // TODO: The target for this is not quite right.\n  PVSCROLL: [\"#playlist-window .playlist-scrollbar\"],\n  SONGNAME: [\"#main-window #marquee\"],\n  TITLEBAR: [\"#main-window #title-bar\"],\n  VOLBAL: [\"#volume\", \"#volume input\", \"#balance\"],\n  WINBUT: [\"#main-window #shade\"],\n  WSNORMAL: [\"#main-window.shade #title-bar\"],\n  WSPOSBAR: [\"#main-window.shade #position\"],\n};\n","import { createPortal } from \"react-dom\";\nimport { useMemo, useLayoutEffect } from \"react\";\n\ntype Props = {\n  children: string;\n  id?: string;\n};\n\nexport default function Css({ children, id }: Props) {\n  const style = useMemo(() => {\n    const s = document.createElement(\"style\");\n    s.type = \"text/css\";\n    if (id != null) {\n      s.id = id;\n    }\n    return s;\n  }, [id]);\n\n  useLayoutEffect(() => {\n    document.head.appendChild(style);\n    return () => style.remove();\n  }, [style]);\n\n  return createPortal(children, style);\n}\n","import { useMemo, useLayoutEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ntype Props = {\n  children: { [id: string]: string[] };\n};\n\n// this.props.children should be an object containing arrays of strings. The\n// keys are ids, and the arrays are arrays of polygon point strings\nexport default function ClipPaths({ children }: Props) {\n  const paths = useMemo(() => {\n    return document.createElement(\"div\");\n  }, []);\n\n  useLayoutEffect(() => {\n    document.body.appendChild(paths);\n    return () => paths.remove();\n  }, [paths]);\n\n  return createPortal(\n    <svg height={0} width={0}>\n      <defs>\n        {Object.keys(children).map((id) => (\n          <clipPath id={id} key={id}>\n            {children[id].map((points, i) => (\n              <polygon points={points} key={i} />\n            ))}\n          </clipPath>\n        ))}\n      </defs>\n    </svg>,\n    paths\n  );\n}\n","/*\r\n * Copyright (c) 2017-2018 Rafael da Silva Rocha.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview A function to swap endianness in byte buffers.\r\n * @see https://github.com/rochars/endianness\r\n */\r\n\r\n/** @module endianness */\r\n\r\n/**\r\n * Swap the byte ordering in a buffer. The buffer is modified in place.\r\n * @param {!Array|!Uint8Array} bytes The bytes.\r\n * @param {number} offset The byte offset.\r\n * @param {number=} start The start index. Assumes 0.\r\n * @param {number=} end The end index. Assumes the buffer length.\r\n * @throws {Error} If the buffer length is not valid.\r\n */\r\nexport default function endianness(bytes, offset, start=0, end=bytes.length) {\r\n  if (end % offset) {\r\n    throw new Error(\"Bad buffer length.\");\r\n  }\r\n  for (let index = start; index < end; index += offset) {\r\n    swap(bytes, offset, index);\r\n  }\r\n}\r\n\r\n/**\r\n * Swap the byte order of a value in a buffer. The buffer is modified in place.\r\n * @param {!Array|!Uint8Array} bytes The bytes.\r\n * @param {number} offset The byte offset.\r\n * @param {number} index The start index.\r\n * @private\r\n */\r\nfunction swap(bytes, offset, index) {\r\n  offset--;\r\n  for(let x = 0; x < offset; x++) {\r\n    /** @type {*} */\r\n    let theByte = bytes[index + x];\r\n    bytes[index + x] = bytes[index + offset];\r\n    bytes[index + offset] = theByte;\r\n    offset--;\r\n  }\r\n}\r\n","/*\r\n * Copyright (c) 2017-2018 Rafael da Silva Rocha.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview Encode and decode int numbers to and from byte buffers.\r\n * @see https://github.com/rochars/byte-data\r\n */\r\n\r\n/**\r\n * A class to write and read integer numbers to and from byte buffers.\r\n */\r\nexport class IntParser {\r\n  \r\n  /**\r\n   * @param {number} bits The number of bits used by the integer.\r\n   * @param {boolean} [signed=false] True for signed, false otherwise.\r\n   * @param {boolean} [clamp=false] True to clamp on overflow.\r\n   */\r\n  constructor(bits, signed=false, clamp=false) {\r\n    /**\r\n     * The number of bits used by one number.\r\n     * @type {number}\r\n     */\r\n    this.bits = bits;\r\n    /**\r\n     * The number of bytes used by one number.\r\n     * @type {number}\r\n     */\r\n    this.bytes = bits < 8 ? 1 : Math.ceil(bits / 8);\r\n    /**\r\n     * @type {number}\r\n     * @protected\r\n     */\r\n    this.max = Math.pow(2, bits) - 1;\r\n    /**\r\n     * @type {number}\r\n     * @protected\r\n     */\r\n    this.min = 0;\r\n    /** @type {number} */\r\n    let r = 8 - ((((bits - 1) | 7) + 1) - bits);\r\n    /**\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    this.lastByteMask_ = Math.pow(2, r > 0 ? r : 8) - 1;\r\n    /**\r\n     * @type {Function}\r\n     * @protected\r\n     */\r\n    this.unpack = this.unpackUnsigned_;\r\n    if (signed) {\r\n      this.max = Math.pow(2, bits) / 2 - 1;\r\n      this.min = -this.max - 1;\r\n      this.unpack = this.unpackSigned_;\r\n    }\r\n    if (clamp) {\r\n      this.overflow_ = this.overflowClamp_;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Write one unsigned integer to a byte buffer.\r\n   * @param {!(Uint8Array|Array<number>)} buffer An array of bytes.\r\n   * @param {number} num The number. Overflows are truncated.\r\n   * @param {number} [index=0] The index being written in the byte buffer.\r\n   * @return {number} The next index to write on the byte buffer.\r\n   */\r\n  pack(buffer, num, index=0) {\r\n    if (num !== num || num.constructor != Number) {\r\n      throw new TypeError();\r\n    }\r\n    num = this.overflow_(num);\r\n    buffer[index] = (num < 0 ? num + Math.pow(2, this.bits) : num) & 255;\r\n    index++;\r\n    for (let i = 2, len = this.bytes; i < len; i++) {\r\n      buffer[index] = Math.floor(num / Math.pow(2, ((i - 1) * 8))) & 255;\r\n      index++;\r\n    }\r\n    if (this.bits > 8) {\r\n      buffer[index] = Math.floor(\r\n        num / Math.pow(2, ((this.bytes - 1) * 8))) & this.lastByteMask_;\r\n      index++;\r\n    }\r\n    return index;\r\n  }\r\n\r\n  /**\r\n   * Read one unsigned integer from a byte buffer.\r\n   * Does not check for overflows.\r\n   * @param {!(Uint8Array|Array<number>)} buffer An array of bytes.\r\n   * @param {number} [index=0] The index to read.\r\n   * @return {number}\r\n   */\r\n  unpack_(buffer, index=0) {\r\n    /** @type {number} */\r\n    let num = 0;\r\n    for(let x = 0; x < this.bytes; x++) {\r\n      num += buffer[index + x] * Math.pow(256, x);\r\n    }\r\n    return num;\r\n  }\r\n\r\n  unpackUnsigned_(buffer, index=0) {\r\n    return this.overflow_(this.unpack_(buffer, index));\r\n  }\r\n\r\n  /**\r\n   * Read one two's complement signed integer from a byte buffer.\r\n   * @param {!(Uint8Array|Array<number>)} buffer An array of bytes.\r\n   * @param {number} [index=0] The index to read.\r\n   * @return {number}\r\n   */\r\n  unpackSigned_(buffer, index=0) {\r\n    return this.overflow_(this.sign_(this.unpack_(buffer, index)));\r\n  }\r\n\r\n  /**\r\n   * Truncate values in case of overflow.\r\n   * @param {number} num The number.\r\n   * @private\r\n   */\r\n  overflow_(num) {\r\n    if (num > this.max || num < this.min) {\r\n      throw new RangeError();\r\n    }\r\n    return num;\r\n  }\r\n\r\n  /**\r\n   * Truncate values in case of overflow.\r\n   * @param {number} num The number.\r\n   * @private\r\n   */\r\n  overflowClamp_(num) {\r\n    if (num > this.max) {\r\n      return this.max;\r\n    } else if (num < this.min) {\r\n      return this.min;\r\n    }\r\n    return num;\r\n  }\r\n\r\n  /**\r\n   * Sign a number.\r\n   * @param {number} num The number.\r\n   * @return {number}\r\n   * @private\r\n   */\r\n  sign_(num) {\r\n    if (num > this.max) {\r\n      num -= (this.max * 2) + 2;\r\n    }\r\n    return num;\r\n  }\r\n}\r\n","/*\r\n * Copyright (c) 2018-2019 Rafael da Silva Rocha.\r\n * Copyright (c) 2013 DeNA Co., Ltd.\r\n * Copyright (c) 2010, Linden Research, Inc\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview Encode and decode IEEE 754 floating point numbers.\r\n * @see https://github.com/rochars/ieee754-buffer\r\n * @see https://bitbucket.org/lindenlab/llsd/raw/7d2646cd3f9b4c806e73aebc4b32bd81e4047fdc/js/typedarray.js\r\n * @see https://github.com/kazuho/ieee754.js/blob/master/ieee754.js\r\n */\r\n\r\n/** \r\n * @module ieee754-buffer\r\n */\r\n\r\n/**\r\n * A class to encode and decode IEEE 754 floating-point numbers.\r\n */\r\nexport class IEEE754Buffer {\r\n\r\n  /**\r\n   * Pack a IEEE 754 floating point number.\r\n   * @param {number} ebits The exponent bits.\r\n   * @param {number} fbits The fraction bits.\r\n   */\r\n  constructor(ebits, fbits) {\r\n    /**\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    this.ebits = ebits;\r\n    /**\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    this.fbits = fbits;\r\n    /**\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    this.bias = (1 << (ebits - 1)) - 1;\r\n    /**\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    this.numBytes = Math.ceil((ebits + fbits) / 8);\r\n    /**\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    this.biasP2 = Math.pow(2, this.bias + 1);\r\n    /**\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    this.ebitsFbits = (ebits + fbits);\r\n    /**\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    this.fbias = Math.pow(2, -(8 * this.numBytes - 1 - ebits));\r\n  }\r\n\r\n  /**\r\n   * Pack a IEEE 754 floating point number.\r\n   * @param {!Uint8Array|!Array<number>} buffer The buffer.\r\n   * @param {number} num The number.\r\n   * @param {number} index The index to write on the buffer.\r\n   * @return {number} The next index to write on the buffer.\r\n   * @throws {TypeError} If input is not a number.\r\n   */\r\n  pack(buffer, num, index) {\r\n    // Only numbers can be packed\r\n    if (typeof num != 'number') {\r\n      throw new TypeError();\r\n    }\r\n    // Round overflows\r\n    if (Math.abs(num) > this.biasP2 - (this.ebitsFbits * 2)) {\r\n      num = num < 0 ? -Infinity : Infinity;\r\n    }\r\n    /**\r\n     * sign, need this to handle negative zero\r\n     * @see http://cwestblog.com/2014/02/25/javascript-testing-for-negative-zero/\r\n     * @type {number}\r\n     */\r\n    let sign = (((num = +num) || 1 / num) < 0) ? 1 : num < 0 ? 1 : 0;\r\n    num = Math.abs(num);\r\n    /** @type {number} */\r\n    let exp = Math.min(Math.floor(Math.log(num) / Math.LN2), 1023);\r\n    /** @type {number} */\r\n    let fraction = roundToEven(num / Math.pow(2, exp) * Math.pow(2, this.fbits));\r\n    // NaN\r\n    if (num !== num) {\r\n      fraction = Math.pow(2, this.fbits - 1);\r\n      exp = (1 << this.ebits) - 1;\r\n    // Number\r\n    } else if (num !== 0) {\r\n      if (num >= Math.pow(2, 1 - this.bias)) {\r\n        if (fraction / Math.pow(2, this.fbits) >= 2) {\r\n          exp = exp + 1;\r\n          fraction = 1;\r\n        }\r\n        // Overflow\r\n        if (exp > this.bias) {\r\n          exp = (1 << this.ebits) - 1;\r\n          fraction = 0;\r\n        } else {\r\n          exp = exp + this.bias;\r\n          fraction = roundToEven(fraction) - Math.pow(2, this.fbits);\r\n        }\r\n      } else {\r\n        fraction = roundToEven(num / Math.pow(2, 1 - this.bias - this.fbits));\r\n        exp = 0;\r\n      } \r\n    }\r\n    return this.packFloatBits_(buffer, index, sign, exp, fraction);\r\n  }\r\n\r\n  /**\r\n   * Unpack a IEEE 754 floating point number.\r\n   * Derived from IEEE754 by DeNA Co., Ltd., MIT License. \r\n   * Adapted to handle NaN. Should port the solution to the original repo.\r\n   * @param {!Uint8Array|!Array<number>} buffer The buffer.\r\n   * @param {number} index The index to read from the buffer.\r\n   * @return {number} The floating point number.\r\n   */\r\n  unpack(buffer, index) {\r\n    /** @type {number} */\r\n    let eMax = (1 << this.ebits) - 1;\r\n    /** @type {number} */\r\n    let significand;\r\n    /** @type {string} */\r\n    let leftBits = \"\";\r\n    for (let i = this.numBytes - 1; i >= 0 ; i--) {\r\n      /** @type {string} */\r\n      let t = buffer[i + index].toString(2);\r\n      leftBits += \"00000000\".substring(t.length) + t;\r\n    }\r\n    /** @type {number} */\r\n    let sign = leftBits.charAt(0) == \"1\" ? -1 : 1;\r\n    leftBits = leftBits.substring(1);\r\n    /** @type {number} */\r\n    let exponent = parseInt(leftBits.substring(0, this.ebits), 2);\r\n    leftBits = leftBits.substring(this.ebits);\r\n    if (exponent == eMax) {\r\n      if (parseInt(leftBits, 2) !== 0) {\r\n        return NaN;\r\n      }\r\n      return sign * Infinity;  \r\n    } else if (exponent === 0) {\r\n      exponent += 1;\r\n      significand = parseInt(leftBits, 2);\r\n    } else {\r\n      significand = parseInt(\"1\" + leftBits, 2);\r\n    }\r\n    return sign * significand * this.fbias * Math.pow(2, exponent - this.bias);\r\n  }\r\n\r\n  /**\r\n   * Pack a IEEE754 from its sign, exponent and fraction bits\r\n   * and place it in a byte buffer.\r\n   * @param {!Uint8Array|!Array<number>} buffer The byte buffer to write to.\r\n   * @param {number} index The buffer index to write.\r\n   * @param {number} sign The sign.\r\n   * @param {number} exp the exponent.\r\n   * @param {number} fraction The fraction.\r\n   * @return {number}\r\n   * @private\r\n   */\r\n  packFloatBits_(buffer, index, sign, exp, fraction) {\r\n    /** @type {!Array<number>} */\r\n    let bits = [];\r\n    // the sign\r\n    bits.push(sign);\r\n    // the exponent\r\n    for (let i = this.ebits; i > 0; i -= 1) {\r\n      bits[i] = (exp % 2 ? 1 : 0);\r\n      exp = Math.floor(exp / 2);\r\n    }\r\n    // the fraction\r\n    let len = bits.length;\r\n    for (let i = this.fbits; i > 0; i -= 1) {\r\n      bits[len + i] = (fraction % 2 ? 1 : 0);\r\n      fraction = Math.floor(fraction / 2);\r\n    }\r\n    // pack as bytes\r\n    /** @type {string} */\r\n    let str = bits.join('');\r\n    /** @type {number} */\r\n    let numBytes = this.numBytes + index - 1;\r\n    /** @type {number} */\r\n    let k = index;\r\n    while (numBytes >= index) {\r\n      buffer[numBytes] = parseInt(str.substring(0, 8), 2);\r\n      str = str.substring(8);\r\n      numBytes--;\r\n      k++;\r\n    }\r\n    return k;\r\n  }\r\n}\r\n\r\n/**\r\n * Round a number to its nearest even value.\r\n * @param {number} n The number.\r\n * @return {number}\r\n * @private\r\n */\r\nfunction roundToEven(n) {\r\n  /** @type {number} */\r\n  let w = Math.floor(n);\r\n  let f = n - w;\r\n  if (f < 0.5) {\r\n    return w;\r\n  }\r\n  if (f > 0.5) {\r\n    return w + 1;\r\n  }\r\n  return w % 2 ? w + 1 : w;\r\n}\r\n","/*\r\n * Copyright (c) 2017-2019 Rafael da Silva Rocha.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview JavaScript binary parser for any browser or environment.\r\n * @see https://github.com/rochars/byte-data\r\n */\r\n\r\n/** @module byte-data */\r\n\r\nimport endianness from 'endianness';\r\nimport { pack as packUTF8, unpack as unpackUTF8 } from 'utf8-buffer';\r\nimport { IntParser } from './lib/int-parser';\r\nimport { IEEE754Buffer } from 'ieee754-buffer';\r\n\r\n/**\r\n * Read a string of UTF-8 characters from a byte buffer.\r\n * @param {!(Uint8Array|Array<number>)} buffer A byte buffer.\r\n * @param {number} [index=0] The buffer index to start reading.\r\n * @param {number} [end=buffer.length] The index to stop reading, non inclusive.\r\n * @return {string}\r\n */\r\nexport function unpackString(buffer, index=0, end=buffer.length) {\r\n  return unpackUTF8(buffer, index, end);\r\n}\r\n\r\n/**\r\n * Write a string of UTF-8 characters as a byte buffer.\r\n * @param {string} str The string to pack.\r\n * @return {!Array<number>} The UTF-8 string bytes.\r\n */\r\nexport function packString(str) {\r\n  /** @type {!Array<number>} */\r\n  let buffer = [];\r\n  packUTF8(str, buffer, 0);\r\n  return buffer;\r\n}\r\n\r\n/**\r\n * Write a string of UTF-8 characters to a byte buffer.\r\n * @param {string} str The string to pack.\r\n * @param {!(Uint8Array|Array<number>)} buffer The output buffer.\r\n * @param {number} [index=0] The buffer index to start writing.\r\n * @return {number} The next index to write in the buffer.\r\n */\r\nexport function packStringTo(str, buffer, index=0) {\r\n  return packUTF8(str, buffer, index);\r\n}\r\n\r\n// Numbers\r\n/**\r\n * Pack a array of numbers to a byte buffer.\r\n * All other packing functions are interfaces to this function.\r\n * @param {!(Array<number>|TypedArray)} values The values to pack.\r\n * @param {!{bits:number,\r\n *   fp: (boolean|undefined),\r\n *   signed: (boolean|undefined),\r\n *   be: (boolean|undefined)}} theType The type definition.\r\n * @param {!(Uint8Array|Array<number>)} buffer The buffer to write on.\r\n * @param {number} [index=0] The buffer index to start writing.\r\n * @param {boolean} [clamp=false] True to clamp ints on overflow.\r\n * @return {number} The next index to write.\r\n * @throws {Error} If the type definition is not valid.\r\n * @throws {RangeError} On overflow.\r\n * @throws {TypeError} If input is not valid.\r\n */\r\nexport function packArrayTo(values, theType, buffer, index=0, clamp=false) {\r\n  theType = theType || {};\r\n  /** @type {!Object} */\r\n  let packer = getParser_(theType.bits, theType.fp, theType.signed, clamp);\r\n  /** @type {number} */\r\n  let offset = Math.ceil(theType.bits / 8);\r\n  /** @type {number} */\r\n  let i = 0;\r\n  /** @type {number} */\r\n  let start = index;\r\n  try {\r\n    for (let valuesLen = values.length; i < valuesLen; i++) {\r\n      index = packer.pack(buffer, values[i], index);\r\n    }\r\n    if (theType.be) {\r\n      endianness(buffer, offset, start, index);\r\n    }\r\n  } catch (e) {\r\n    throwValueError_(e, values[i], i);\r\n  }\r\n  return index;\r\n}\r\n\r\n/**\r\n * Unpack a array of numbers from a byte buffer to a array or a typed array.\r\n * All other unpacking functions are interfaces to this function.\r\n * @param {!(Uint8Array|Array<number>)} buffer The byte buffer.\r\n * @param {!{bits:number,\r\n *   fp: (boolean|undefined),\r\n *   signed: (boolean|undefined),\r\n *   be: (boolean|undefined)}} theType The type definition.\r\n * @param {!(TypedArray|Array<number>)} output The output array or typed array.\r\n * @param {number} [start=0] The buffer index to start reading.\r\n * @param {number} [end=buffer.length] The buffer index to stop reading.\r\n * @param {boolean} [safe=false] If set to false, extra bytes in the end of\r\n *   the array are ignored and input buffers with insufficient bytes will\r\n *   write nothing to the output array. If safe is set to true the function\r\n *   will throw a 'Bad buffer length' error.\r\n * @param {boolean} [clamp=false] True to clamp ints on overflow.\r\n * @throws {Error} If the type definition is not valid\r\n * @throws {RangeError} On overflow\r\n */\r\nexport function unpackArrayTo(\r\n    buffer, theType, output, start=0, end=buffer.length,\r\n    safe=false, clamp=false) {\r\n  theType = theType || {};\r\n  /** @type {!Object} */\r\n  let packer = getParser_(theType.bits, theType.fp, theType.signed, clamp);\r\n  /** @type {number} */\r\n  let offset = Math.ceil(theType.bits / 8);\r\n  // getUnpackLen_ will either fix the length of the input buffer\r\n  // according to the byte offset of the type (on unsafe mode) or\r\n  // throw a Error if the input buffer has a bad length (on safe mode)\r\n  end = getUnpackLen_(buffer, start, end, offset, safe);\r\n  /** @type {number} */\r\n  let index = 0;\r\n  let j = start;\r\n  try {\r\n    if (theType.be) {\r\n      endianness(buffer, offset, start, end);\r\n    }\r\n    for (; j < end; j += offset, index++) {\r\n      output[index] = packer.unpack(buffer, j);\r\n    }\r\n    if (theType.be) {\r\n      endianness(buffer, offset, start, end);\r\n    }\r\n  } catch (e) {\r\n    throwValueError_(e, buffer.slice(j, j + offset), j);\r\n  }\r\n}\r\n\r\n/**\r\n * Pack a number to a byte buffer.\r\n * @param {number} value The value.\r\n * @param {!{bits:number,\r\n *   fp: (boolean|undefined),\r\n *   signed: (boolean|undefined),\r\n *   be: (boolean|undefined)}} theType The type definition.\r\n * @param {!(Uint8Array|Array<number>)} buffer The byte buffer to write on.\r\n * @param {number} [index=0] The buffer index to write.\r\n * @param {boolean} [clamp=false] True to clamp ints on overflow.\r\n * @return {number} The next index to write.\r\n * @throws {Error} If the type definition is not valid.\r\n * @throws {RangeError} On overflow.\r\n * @throws {TypeError} If input is not valid.\r\n */\r\nexport function packTo(value, theType, buffer, index=0, clamp=false) {\r\n  return packArrayTo([value], theType, buffer, index, clamp);\r\n}\r\n\r\n/**\r\n * Pack a number as a array of bytes.\r\n * @param {number} value The number to pack.\r\n * @param {!{bits:number,\r\n *   fp: (boolean|undefined),\r\n *   signed: (boolean|undefined),\r\n *   be: (boolean|undefined)}} theType The type definition.\r\n * @param {boolean} [clamp=false] True to clamp ints on overflow.\r\n * @return {!Array<number>} The packed value.\r\n * @throws {Error} If the type definition is not valid.\r\n * @throws {RangeError} On overflow.\r\n * @throws {TypeError} If input is not valid.\r\n */\r\nexport function pack(value, theType, clamp=false) {\r\n  /** @type {!Array<number>} */\r\n  let output = [];\r\n  packTo(value, theType, output, 0, clamp);\r\n  return output;\r\n}\r\n\r\n/**\r\n * Pack a array of numbers as a array of bytes.\r\n * @param {!(Array<number>|TypedArray)} values The values to pack.\r\n * @param {!{bits:number,\r\n *   fp: (boolean|undefined),\r\n *   signed: (boolean|undefined),\r\n *   be: (boolean|undefined)}} theType The type definition.\r\n * @param {boolean} [clamp=false] True to clamp ints on overflow.\r\n * @return {!Array<number>} The packed values.\r\n * @throws {Error} If the type definition is not valid.\r\n * @throws {RangeError} On overflow.\r\n * @throws {TypeError} If input is not valid.\r\n */\r\nexport function packArray(values, theType, clamp=false) {\r\n  /** @type {!Array<number>} */\r\n  let output = [];\r\n  packArrayTo(values, theType, output, 0, clamp);\r\n  return output;\r\n}\r\n\r\n/**\r\n * Unpack a array of numbers from a byte buffer.\r\n * @param {!(Uint8Array|Array<number>)} buffer The byte buffer.\r\n * @param {!{bits:number,\r\n *   fp: (boolean|undefined),\r\n *   signed: (boolean|undefined),\r\n *   be: (boolean|undefined)}} theType The type definition.\r\n * @param {number} [start=0] The buffer index to start reading.\r\n * @param {number} [end=buffer.length] The buffer index to stop reading.\r\n * @param {boolean} [safe=false] If set to false, extra bytes in the end of\r\n *   the array are ignored and input buffers with insufficient bytes will\r\n *   output a empty array. If safe is set to true the function\r\n *   will throw a 'Bad buffer length' error.\r\n * @param {boolean} [clamp=false] True to clamp ints on overflow.\r\n * @return {!Array<number>}\r\n * @throws {Error} If the type definition is not valid\r\n * @throws {RangeError} On overflow\r\n */\r\nexport function unpackArray(\r\n    buffer, theType, start=0, end=buffer.length, safe=false, clamp=false) {\r\n  /** @type {!Array<number>} */\r\n  let output = [];\r\n  unpackArrayTo(buffer, theType, output, start, end, safe, clamp);\r\n  return output;\r\n}\r\n\r\n/**\r\n * Unpack a number from a byte buffer.\r\n * @param {!(Uint8Array|Array<number>)} buffer The byte buffer.\r\n * @param {!{bits:number,\r\n *   fp: (boolean|undefined),\r\n *   signed: (boolean|undefined),\r\n *   be: (boolean|undefined)}} theType The type definition.\r\n * @param {number} [index=0] The buffer index to read.\r\n * @param {boolean} [clamp=false] True to clamp ints on overflow.\r\n * @return {number}\r\n * @throws {Error} If the type definition is not valid\r\n * @throws {Error} On bad buffer length.\r\n * @throws {RangeError} On overflow\r\n */\r\nexport function unpack(buffer, theType, index=0, clamp=false) {\r\n  return unpackArray(\r\n    buffer, theType, index, index + Math.ceil(theType.bits / 8),\r\n    true, clamp)[0];\r\n}\r\n\r\n/**\r\n * Throw a error with information about the problem.\r\n * @param {!Object} err The Error object that is being raised.\r\n * @param {*} value The value that caused the error.\r\n * @param {number} index The index of the value that caused the error.\r\n * @throws {RangeError|TypeError|Error} A Error with a message.\r\n * @private\r\n */\r\nfunction throwValueError_(err, value, index) {\r\n  err.message = err.constructor.name +\r\n    ' at index ' + index + ': ' + value;\r\n  throw err;\r\n}\r\n\r\n/**\r\n * Unpack a array of numbers to a typed array.\r\n * All other unpacking functions are interfaces to this function.\r\n * @param {!(Uint8Array|Array<number>)} buffer The byte buffer.\r\n * @param {number} start The buffer index to start reading.\r\n * @param {number} end The buffer index to stop reading.\r\n * @param {number} offset The number of bytes used by the type.\r\n * @param {boolean} safe True for size-safe buffer reading.\r\n * @throws {Error} On bad buffer length, if safe.\r\n * @private\r\n */\r\nfunction getUnpackLen_(buffer, start, end, offset, safe) {\r\n  /** @type {number} */\r\n  let extra = (end - start) % offset;\r\n  if (safe && (extra || buffer.length < offset)) {\r\n    throw new Error('Bad buffer length');\r\n  }\r\n  return end - extra;\r\n}\r\n\r\n/**\r\n * Return a parser for int, uint or fp numbers.\r\n * @param {number} bits The number of bits.\r\n * @param {boolean|undefined} fp True for fp numbers, false otherwise.\r\n * @param {boolean|undefined} signed True for signed ints, false otherwise.\r\n * @param {boolean|undefined} clamp True to clamp ints on overflow, false otherwise.\r\n * @return {!Object}\r\n * @private\r\n */\r\nfunction getParser_(bits, fp, signed, clamp) {\r\n  if (fp) {\r\n    validateFloatType(bits);\r\n  } else {\r\n    validateIntType(bits);\r\n  }\r\n  if (fp && bits === 16) {\r\n    return new IEEE754Buffer(5, 11);\r\n  } else if (fp && bits == 32) {\r\n    return new IEEE754Buffer(8, 23);\r\n  } else if(fp && bits == 64) {\r\n    return new IEEE754Buffer(11, 52);\r\n  }\r\n  return new IntParser(bits, signed, clamp);\r\n}\r\n\r\n/**\r\n * The type definition error message.\r\n * @type {string}\r\n * @private\r\n */\r\nconst TYPE_ERR = 'Unsupported type';\r\n\r\n/**\r\n * Validate the type definition of floating-point numbers.\r\n * @param {number} bits The number of bits.\r\n * @throws {Error} If the type definition is not valid.\r\n * @private\r\n */\r\nfunction validateFloatType(bits) {\r\n  if (!bits || bits !== 16 && bits !== 32 && bits !== 64) {\r\n    throw new Error(TYPE_ERR + ': float, bits: ' + bits);\r\n  }\r\n}\r\n\r\n/**\r\n * Validate the type definition of integers.\r\n * @param {number} bits The number of bits.\r\n * @throws {Error} If the type definition is not valid.\r\n * @private\r\n */\r\nfunction validateIntType(bits) {\r\n  if (!bits || bits < 1 || bits > 53) {\r\n    throw new Error(TYPE_ERR + ': int, bits: ' + bits);\r\n  }\r\n}\r\n","/*\r\n * Copyright (c) 2018 Rafael da Silva Rocha.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview Functions to serialize and deserialize UTF-8 strings.\r\n * @see https://github.com/rochars/utf8-buffer\r\n * @see https://encoding.spec.whatwg.org/#the-encoding\r\n * @see https://encoding.spec.whatwg.org/#utf-8-encoder\r\n */\r\n\r\n/** @module utf8-buffer */\r\n\r\n/**\r\n * Read a string of UTF-8 characters from a byte buffer.\r\n * Invalid characters are replaced with 'REPLACEMENT CHARACTER' (U+FFFD).\r\n * @see https://encoding.spec.whatwg.org/#the-encoding\r\n * @see https://stackoverflow.com/a/34926911\r\n * @param {!Uint8Array|!Array<number>} buffer A byte buffer.\r\n * @param {number=} start The buffer index to start reading.\r\n * @param {?number=} end The buffer index to stop reading.\r\n *   Assumes the buffer length if undefined.\r\n * @return {string}\r\n */\r\nexport function unpack(buffer, start=0, end=buffer.length) {\r\n  /** @type {string} */\r\n  let str = '';\r\n  for(let index = start; index < end;) {\r\n    /** @type {number} */\r\n    let lowerBoundary = 0x80;\r\n    /** @type {number} */\r\n    let upperBoundary = 0xBF;\r\n    /** @type {boolean} */\r\n    let replace = false;\r\n    /** @type {number} */\r\n    let charCode = buffer[index++];\r\n    if (charCode >= 0x00 && charCode <= 0x7F) {\r\n      str += String.fromCharCode(charCode);\r\n    } else {\r\n      /** @type {number} */\r\n      let count = 0;\r\n      if (charCode >= 0xC2 && charCode <= 0xDF) {\r\n        count = 1;\r\n      } else if (charCode >= 0xE0 && charCode <= 0xEF ) {\r\n        count = 2;\r\n        if (buffer[index] === 0xE0) {\r\n          lowerBoundary = 0xA0;\r\n        }\r\n        if (buffer[index] === 0xED) {\r\n          upperBoundary = 0x9F;\r\n        }\r\n      } else if (charCode >= 0xF0 && charCode <= 0xF4 ) {\r\n        count = 3;\r\n        if (buffer[index] === 0xF0) {\r\n          lowerBoundary = 0x90;\r\n        }\r\n        if (buffer[index] === 0xF4) {\r\n          upperBoundary = 0x8F;\r\n        }\r\n      } else {\r\n        replace = true;\r\n      }\r\n      charCode = charCode & (1 << (8 - count - 1)) - 1;\r\n      for (let i = 0; i < count; i++) {\r\n        if (buffer[index] < lowerBoundary || buffer[index] > upperBoundary) {\r\n          replace = true;\r\n        }\r\n        charCode = (charCode << 6) | (buffer[index] & 0x3f);\r\n        index++;\r\n      }\r\n      if (replace) {\r\n        str += String.fromCharCode(0xFFFD);\r\n      } \r\n      else if (charCode <= 0xffff) {\r\n        str += String.fromCharCode(charCode);\r\n      } else {\r\n        charCode -= 0x10000;\r\n        str += String.fromCharCode(\r\n          ((charCode >> 10) & 0x3ff) + 0xd800,\r\n          (charCode & 0x3ff) + 0xdc00);\r\n      }\r\n    }\r\n  }\r\n  return str;\r\n}\r\n\r\n/**\r\n * Write a string of UTF-8 characters to a byte buffer.\r\n * @see https://encoding.spec.whatwg.org/#utf-8-encoder\r\n * @param {string} str The string to pack.\r\n * @param {!Uint8Array|!Array<number>} buffer The buffer to pack the string to.\r\n * @param {number=} index The buffer index to start writing.\r\n * @return {number} The next index to write in the buffer.\r\n */\r\nexport function pack(str, buffer, index=0) {\r\n  for (let i = 0, len = str.length; i < len; i++) {\r\n    /** @type {number} */\r\n    let codePoint = str.codePointAt(i);\r\n    if (codePoint < 128) {\r\n      buffer[index] = codePoint;\r\n      index++;\r\n    } else {\r\n      /** @type {number} */\r\n      let count = 0;\r\n      /** @type {number} */\r\n      let offset = 0;\r\n      if (codePoint <= 0x07FF) {\r\n        count = 1;\r\n        offset = 0xC0;\r\n      } else if(codePoint <= 0xFFFF) {\r\n        count = 2;\r\n        offset = 0xE0;\r\n      } else if(codePoint <= 0x10FFFF) {\r\n        count = 3;\r\n        offset = 0xF0;\r\n        i++;\r\n      }\r\n      buffer[index] = (codePoint >> (6 * count)) + offset;\r\n      index++;\r\n      while (count > 0) {\r\n        buffer[index] = 0x80 | (codePoint >> (6 * (count - 1)) & 0x3F);\r\n        index++;\r\n        count--;\r\n      }\r\n    }\r\n  }\r\n  return index;\r\n}\r\n","/*\r\n * Copyright (c) 2017-2019 Rafael da Silva Rocha.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview The RIFFFile class.\r\n * @see https://github.com/rochars/riff-file\r\n */\r\n\r\n/** @module riff-file */\r\n\r\nimport {unpackString, unpack} from 'byte-data';\r\n\r\n/**\r\n * A class to perform low-level reading of RIFF/RIFX files.\r\n */\r\nexport class RIFFFile {\r\n\r\n  constructor() {\r\n    /**\r\n     * The container identifier.\r\n     * 'RIFF', 'RIFX' and 'RF64' are supported.\r\n     * @type {string}\r\n     */\r\n    this.container = '';\r\n    /**\r\n     * The main chunk size, in bytes.\r\n     * @type {number}\r\n     */\r\n    this.chunkSize = 0;\r\n    /**\r\n     * The format identifier.\r\n     * @type {string}\r\n     */\r\n    this.format = '';\r\n    /**\r\n     * An object representing the signature of all chunks in the file.\r\n     * @type {{\r\n      chunkId: string,\r\n      chunkSize: number,\r\n      format: string,\r\n      chunkData: {start: number, end: number},\r\n      subChunks: Array\r\n      }|null}\r\n     */\r\n    this.signature = null;\r\n    /**\r\n     * @type {number}\r\n     * @protected\r\n     */\r\n    this.head = 0;\r\n    /**\r\n     * @type {\r\n      {bits: number, be: boolean, signed: boolean, fp: boolean}\r\n     }\r\n     * @protected\r\n     */\r\n    this.uInt32 = { bits: 32, be: false, signed: false, fp: false };\r\n    /**\r\n     * The list of supported containers.\r\n     * Any format different from RIFX will be treated as RIFF.\r\n     * @type {!Array<string>}\r\n     * @protected\r\n     */\r\n    this.supported_containers = ['RIFF', 'RIFX'];\r\n  }\r\n\r\n  /**\r\n   * Read the signature of the chunks in a RIFF/RIFX file.\r\n   * @param {!Uint8Array} buffer The file bytes.\r\n   * @protected\r\n   */\r\n  setSignature(buffer) {\r\n      this.head = 0;\r\n      this.container = this.readString(buffer, 4);\r\n      if (this.supported_containers.indexOf(this.container) === -1) {\r\n        throw Error('Not a supported format.');\r\n      }\r\n      this.uInt32.be = this.container === 'RIFX';\r\n      this.chunkSize = this.readUInt32(buffer);\r\n      this.format = this.readString(buffer, 4);\r\n      // The RIFF file signature\r\n      this.signature = {\r\n          chunkId: this.container,\r\n          chunkSize: this.chunkSize,\r\n          format: this.format,\r\n          subChunks: this.getSubChunksIndex_(buffer),\r\n          chunkData: {start: 0, end: this.chunkSize}\r\n      };\r\n  }\r\n\r\n  /**\r\n    * Find a chunk by its fourCC_ in a array of RIFF chunks.\r\n    * @param {string} chunkId The chunk fourCC_.\r\n    * @param {boolean} multiple True if there may be multiple chunks\r\n    *    with the same chunkId.\r\n    * @return {Object}\r\n    * @protected\r\n    */\r\n  findChunk(chunkId, multiple=false) {\r\n    /** @type {!Array|null} */\r\n    let chunks = this.signature.subChunks;\r\n    /** @type {!Array<!Object>} */\r\n    let chunk = [];\r\n    for (let i=0; i<chunks.length; i++) {\r\n      if (chunks[i].chunkId == chunkId) {\r\n        if (multiple) {\r\n          chunk.push(chunks[i]);\r\n        } else {\r\n          return chunks[i];\r\n        }\r\n      }\r\n    }\r\n    if (chunkId == 'LIST') {\r\n      return chunk.length ? chunk : null;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Read bytes as a string from a RIFF chunk.\r\n   * @param {!Uint8Array} bytes The bytes.\r\n   * @param {number} maxSize the max size of the string.\r\n   * @return {string} The string.\r\n   * @protected\r\n   */\r\n  readString(bytes, maxSize) {\r\n    /** @type {string} */\r\n    let str = '';\r\n    str = unpackString(bytes, this.head, this.head + maxSize);\r\n    this.head += maxSize;\r\n    return str;\r\n  }\r\n\r\n  /**\r\n   * Read a number from a chunk.\r\n   * @param {!Uint8Array} bytes The chunk bytes.\r\n   * @return {number} The number.\r\n   * @protected\r\n   */\r\n  readUInt32(bytes) {\r\n    /** @type {number} */\r\n    let value = unpack(bytes, this.uInt32, this.head);\r\n    this.head += 4;\r\n    return value;\r\n  }\r\n\r\n  /**\r\n   * Return the sub chunks of a RIFF file.\r\n   * @param {!Uint8Array} buffer the RIFF file bytes.\r\n   * @return {!Array<Object>} The subchunks of a RIFF/RIFX or LIST chunk.\r\n   * @private\r\n   */\r\n  getSubChunksIndex_(buffer) {\r\n      /** @type {!Array<!Object>} */\r\n      let chunks = [];\r\n      /** @type {number} */\r\n      let i = this.head;\r\n      while(i <= buffer.length - 8) {\r\n          chunks.push(this.getSubChunkIndex_(buffer, i));\r\n          i += 8 + chunks[chunks.length - 1].chunkSize;\r\n          i = i % 2 ? i + 1 : i;\r\n      }\r\n      return chunks;\r\n  }\r\n\r\n  /**\r\n   * Return a sub chunk from a RIFF file.\r\n   * @param {!Uint8Array} buffer the RIFF file bytes.\r\n   * @param {number} index The start index of the chunk.\r\n   * @return {!Object} A subchunk of a RIFF/RIFX or LIST chunk.\r\n   * @private\r\n   */\r\n  getSubChunkIndex_(buffer, index) {\r\n      /** @type {!Object} */\r\n      let chunk = {\r\n          chunkId: this.getChunkId_(buffer, index),\r\n          chunkSize: this.getChunkSize_(buffer, index),\r\n      };\r\n      if (chunk.chunkId == 'LIST') {\r\n          chunk.format = unpackString(buffer, index + 8, index + 12);\r\n          this.head += 4;\r\n          chunk.subChunks = this.getSubChunksIndex_(buffer);\r\n      } else {\r\n          /** @type {number} */\r\n          let realChunkSize = chunk.chunkSize % 2 ?\r\n              chunk.chunkSize + 1 : chunk.chunkSize;\r\n          this.head = index + 8 + realChunkSize;\r\n          chunk.chunkData = {\r\n              start: index + 8,\r\n              end: this.head\r\n          };\r\n      }\r\n      return chunk;\r\n  }\r\n\r\n  /**\r\n   * Return the fourCC_ of a chunk.\r\n   * @param {!Uint8Array} buffer the RIFF file bytes.\r\n   * @param {number} index The start index of the chunk.\r\n   * @return {string} The id of the chunk.\r\n   * @private\r\n   */\r\n  getChunkId_(buffer, index) {\r\n      this.head += 4;\r\n      return unpackString(buffer, index, index + 4);\r\n  }\r\n\r\n  /**\r\n   * Return the size of a chunk.\r\n   * @param {!Uint8Array} buffer the RIFF file bytes.\r\n   * @param {number} index The start index of the chunk.\r\n   * @return {number} The size of the chunk without the id and size fields.\r\n   * @private\r\n   */\r\n  getChunkSize_(buffer, index) {\r\n      this.head += 4;\r\n      return unpack(buffer, this.uInt32, index + 4);\r\n  }\r\n}\r\n","import { RIFFFile } from \"riff-file\";\nimport { unpackArray, unpackString } from \"byte-data\";\nconst DWORD = { bits: 32, be: false, signed: false, fp: false };\nexport function parseAni(arr) {\n    const riff = new RIFFFile();\n    riff.setSignature(arr);\n    const signature = riff.signature;\n    if (signature.format !== \"ACON\") {\n        throw new Error(`Expected format. Expected \"ACON\", got \"${signature.format}\"`);\n    }\n    // Helper function to get a chunk by chunkId and transform it if it's non-null.\n    function mapChunk(chunkId, mapper) {\n        const chunk = riff.findChunk(chunkId);\n        return chunk == null ? null : mapper(chunk);\n    }\n    function readImages(chunk, frameCount) {\n        return chunk.subChunks.slice(0, frameCount).map((c) => {\n            if (c.chunkId !== \"icon\") {\n                throw new Error(`Unexpected chunk type in fram: ${c.chunkId}`);\n            }\n            return arr.slice(c.chunkData.start, c.chunkData.end);\n        });\n    }\n    const metadata = mapChunk(\"anih\", (c) => {\n        const words = unpackArray(arr, DWORD, c.chunkData.start, c.chunkData.end);\n        return {\n            cbSize: words[0],\n            nFrames: words[1],\n            nSteps: words[2],\n            iWidth: words[3],\n            iHeight: words[4],\n            iBitCount: words[5],\n            nPlanes: words[6],\n            iDispRate: words[7],\n            bfAttributes: words[8],\n        };\n    });\n    if (metadata == null) {\n        throw new Error(\"Did not find anih\");\n    }\n    const rate = mapChunk(\"rate\", (c) => {\n        return unpackArray(arr, DWORD, c.chunkData.start, c.chunkData.end);\n    });\n    // chunkIds are always four chars, hence the trailing space.\n    const seq = mapChunk(\"seq \", (c) => {\n        return unpackArray(arr, DWORD, c.chunkData.start, c.chunkData.end);\n    });\n    const lists = riff.findChunk(\"LIST\", true);\n    const imageChunk = lists === null || lists === void 0 ? void 0 : lists.find((c) => c.format === \"fram\");\n    if (imageChunk == null) {\n        throw new Error(\"Did not find fram LIST\");\n    }\n    let images = readImages(imageChunk, metadata.nFrames);\n    let title = null;\n    let artist = null;\n    const infoChunk = lists === null || lists === void 0 ? void 0 : lists.find((c) => c.format === \"INFO\");\n    if (infoChunk != null) {\n        infoChunk.subChunks.forEach((c) => {\n            switch (c.chunkId) {\n                case \"INAM\":\n                    title = unpackString(arr, c.chunkData.start, c.chunkData.end);\n                    break;\n                case \"IART\":\n                    artist = unpackString(arr, c.chunkData.start, c.chunkData.end);\n                    break;\n                case \"LIST\":\n                    // Some cursors with an artist of \"Created with Take ONE 3.5 (unregisterred version)\" seem to have their frames here for some reason?\n                    if (c.format === \"fram\") {\n                        images = readImages(c, metadata.nFrames);\n                    }\n                    break;\n                default:\n                // Unexpected subchunk\n            }\n        });\n    }\n    return { images, rate, seq, metadata, artist, title };\n}\n//# sourceMappingURL=parser.js.map","import { parseAni } from \"./parser.js\";\nconst JIFFIES_PER_MS = 1000 / 60;\n// Generate CSS for an animated cursor.\n//\n// This function returns CSS containing a set of keyframes with embedded Data\n// URIs as well as a CSS rule to the given selector.\nexport function convertAniBinaryToCSS(selector, aniBinary) {\n    const ani = readAni(aniBinary);\n    const animationName = `ani-cursor-${uniqueId()}`;\n    const keyframes = ani.frames.map(({ url, percents }) => {\n        const percent = percents.map((num) => `${num}%`).join(\", \");\n        return `${percent} { cursor: url(${url}), auto; }`;\n    });\n    // CSS properties with a animation type of \"discrete\", like `cursor`, actually\n    // switch half-way _between_ each keyframe percentage. Luckily this half-way\n    // measurement is applied _after_ the easing function is applied. So, we can\n    // force the frames to appear at exactly the % that we specify by using\n    // `timing-function` of `step-end`.\n    //\n    // https://drafts.csswg.org/web-animations-1/#discrete\n    const timingFunction = \"step-end\";\n    // Winamp (re)starts the animation cycle when your mouse enters an element. By\n    // default this approach would cause the animation to run continuously, even\n    // when the cursor is not visible. To match Winamp's behavior we add a\n    // `:hover` pseudo selector so that the animation only runs when the cursor is\n    // visible.\n    const pseudoSelector = \":hover\";\n    // prettier-ignore\n    return `\n    @keyframes ${animationName} {\n        ${keyframes.join(\"\\n\")}\n    }\n    ${selector}${pseudoSelector} {\n        animation: ${animationName} ${ani.duration}ms ${timingFunction} infinite;\n    }\n   `;\n}\nfunction readAni(contents) {\n    var _a;\n    const ani = parseAni(contents);\n    const rate = (_a = ani.rate) !== null && _a !== void 0 ? _a : ani.images.map(() => ani.metadata.iDispRate);\n    const duration = sum(rate);\n    const frames = ani.images.map((image) => ({\n        url: curUrlFromByteArray(image),\n        percents: [],\n    }));\n    let elapsed = 0;\n    rate.forEach((r, i) => {\n        const frameIdx = ani.seq ? ani.seq[i] : i;\n        frames[frameIdx].percents.push((elapsed / duration) * 100);\n        elapsed += r;\n    });\n    return { duration: duration * JIFFIES_PER_MS, frames };\n}\n/* Utility Functions */\nlet i = 0;\nconst uniqueId = () => i++;\nexport function base64FromDataArray(dataArray) {\n    return window.btoa(Array.from(dataArray)\n        .map((byte) => String.fromCharCode(byte))\n        .join(\"\"));\n}\nfunction curUrlFromByteArray(arr) {\n    const base64 = base64FromDataArray(arr);\n    return `data:image/x-win-bitmap;base64,${base64}`;\n}\nfunction sum(values) {\n    return values.reduce((total, value) => total + value, 0);\n}\n//# sourceMappingURL=index.js.map","// Dynamically set the css background images for all the sprites\nimport { LETTERS } from \"../constants\";\nimport { imageSelectors, cursorSelectors } from \"../skinSelectors\";\nimport { useTypedSelector } from \"../hooks\";\nimport * as Selectors from \"../selectors\";\nimport { SkinImages } from \"../types\";\nimport { createSelector } from \"reselect\";\nimport Css from \"./Css\";\nimport ClipPaths from \"./ClipPaths\";\nimport { convertAniBinaryToCSS } from \"ani-cursor\";\n\nconst CSS_PREFIX = \"#webamp\";\n\nconst mapRegionNamesToIds: { [key: string]: string } = {\n  normal: \"mainWindowClipPath\",\n  windowshade: \"shadeMainWindowClipPath\",\n  equalizer: \"equalizerWindowClipPath\",\n  equalizerws: \"shadeEqualizerWindowClipPath\",\n};\n\nconst mapRegionNamesToMatcher: { [key: string]: string } = {\n  normal: \"#main-window:not(.shade)\",\n  windowshade: \"#main-window.shade\",\n  equalizer: \"#equalizer-window:not(.shade)\",\n  equalizerws: \"#equalizer-window.shade\",\n};\n\nconst numExIsUsed = (skinImages: SkinImages) => Boolean(skinImages.DIGIT_0_EX);\n\nconst FALLBACKS: { [key: string]: string } = {\n  MAIN_BALANCE_BACKGROUND: \"MAIN_VOLUME_BACKGROUND\",\n  MAIN_BALANCE_THUMB: \"MAIN_VOLUME_THUMB\",\n  MAIN_BALANCE_THUMB_ACTIVE: \"MAIN_VOLUME_THUMB_SELECTED\",\n  EQ_MAXIMIZE_BUTTON_ACTIVE: \"EQ_MAXIMIZE_BUTTON_ACTIVE_FALLBACK\",\n};\n\n// Cursors might appear in context menus which are not nested inside the window layout div.\nfunction normalizeCursorSelector(selector: string): string {\n  return `${\n    // TODO: Fix this hack\n    // Maybe our CSS name spacing should be based on some other class/id\n    // than the one we use for defining the main div.\n    // That way it could be shared by both the player and the context menu.\n    selector.startsWith(\"#webamp-context-menu\") ? \"\" : CSS_PREFIX\n  } ${selector}`;\n}\n\nconst getCssRules = createSelector(\n  Selectors.getSkinImages,\n  Selectors.getSkinCursors,\n  Selectors.getSkinLetterWidths,\n  Selectors.getSkinRegion,\n  (skinImages, skinCursors, skinGenLetterWidths, skinRegion): string | null => {\n    if (!skinImages || !skinCursors) {\n      return null;\n    }\n    const cssRules = [];\n    Object.keys(imageSelectors).forEach((imageName) => {\n      const imageUrl =\n        skinImages[imageName] || skinImages[FALLBACKS[imageName]];\n      if (imageUrl) {\n        imageSelectors[imageName].forEach((_selector) => {\n          const selector = _selector; // .replace(\":active\", \".active\");\n          cssRules.push(\n            `${CSS_PREFIX} ${selector} {background-image: url(${imageUrl})}`\n          );\n        });\n      }\n    });\n\n    if (skinGenLetterWidths != null) {\n      LETTERS.forEach((letter) => {\n        const width = skinGenLetterWidths[`GEN_TEXT_${letter}`];\n        const selectedWidth =\n          skinGenLetterWidths[`GEN_TEXT_SELECTED_${letter}`];\n        cssRules.push(\n          `${CSS_PREFIX} .gen-text-${letter.toLowerCase()} {width: ${width}px;}`\n        );\n        cssRules.push(\n          `${CSS_PREFIX} .selected .gen-text-${letter.toLowerCase()} {width: ${selectedWidth}px;}`\n        );\n      });\n    }\n\n    Object.entries(cursorSelectors).forEach(([cursorName, cursorSelector]) => {\n      const cursor = skinCursors[cursorName];\n      if (cursor == null) {\n        return;\n      }\n      const cursorRules = cursorSelector\n        .map(normalizeCursorSelector)\n        .map((selector) => {\n          switch (cursor.type) {\n            case \"cur\":\n              return `${selector} {cursor: url(${cursor.url}), auto}`;\n            case \"ani\": {\n              try {\n                return convertAniBinaryToCSS(selector, cursor.aniData);\n              } catch (e) {\n                console.error(e);\n                return null;\n              }\n            }\n          }\n        })\n        .filter(Boolean);\n      cssRules.push(...cursorRules);\n    });\n\n    if (numExIsUsed(skinImages)) {\n      // This alternate number file requires that the minus sign be\n      // formatted differently.\n      cssRules.push(\n        `${CSS_PREFIX} .webamp-status #time #minus-sign { top: 0px; left: -1px; width: 9px; height: 13px; }`\n      );\n    }\n\n    for (const [regionName, polygons] of Object.entries(skinRegion)) {\n      if (polygons) {\n        const matcher = mapRegionNamesToMatcher[regionName];\n        const id = mapRegionNamesToIds[regionName];\n        cssRules.push(`${CSS_PREFIX} ${matcher} { clip-path: url(#${id}); }`);\n      }\n    }\n\n    return cssRules.join(\"\\n\");\n  }\n);\n\nconst getClipPaths = createSelector(Selectors.getSkinRegion, (skinRegion) => {\n  const clipPaths: { [id: string]: string[] } = {};\n  for (const [regionName, polygons] of Object.entries(skinRegion)) {\n    if (polygons) {\n      const id = mapRegionNamesToIds[regionName];\n      clipPaths[id] = polygons;\n    }\n  }\n  return clipPaths;\n});\n\nexport default function Skin() {\n  const cssRules = useTypedSelector(getCssRules);\n  const clipPaths = useTypedSelector(getClipPaths);\n  if (cssRules == null) {\n    return null;\n  }\n  return (\n    <>\n      <Css id=\"webamp-skin\">{cssRules}</Css>\n      <ClipPaths>{clipPaths}</ClipPaths>\n    </>\n  );\n}\n","import {\n  useLayoutEffect,\n  useEffect,\n  useState,\n  useCallback,\n  StrictMode,\n} from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { FilePicker } from \"../types\";\nimport { WINDOWS } from \"../constants\";\nimport * as Selectors from \"../selectors\";\nimport * as Actions from \"../actionCreators\";\nimport * as Utils from \"../utils\";\nimport MilkdropWindow from \"../components/MilkdropWindow\";\nimport ContextMenuWrapper from \"./ContextMenuWrapper\";\nimport MainContextMenu from \"./MainWindow/MainContextMenu\";\nimport WindowManager from \"./WindowManager\";\nimport MainWindow from \"./MainWindow\";\nimport PlaylistWindow from \"./PlaylistWindow\";\nimport EqualizerWindow from \"./EqualizerWindow\";\nimport Skin from \"./Skin\";\n\nimport Media, { IMedia } from \"../media\";\nimport { useTypedSelector, useActionCreator } from \"../hooks\";\nimport Css from \"./Css\";\n\n// @ts-ignore\nimport cssText from \"../../css/webamp.css?inline\";\n\ninterface Props {\n  filePickers: FilePicker[];\n  media: IMedia;\n  parentDomNode: HTMLElement;\n  onMount?: () => void;\n}\n\n/**\n * Constructs the windows to render\n */\nexport default function App({\n  media,\n  filePickers,\n  onMount,\n  parentDomNode,\n}: Props) {\n  const closed = useTypedSelector(Selectors.getClosed);\n  const genWindowsInfo = useTypedSelector(Selectors.getGenWindows);\n  const zIndex = useTypedSelector(Selectors.getZIndex);\n\n  const browserWindowSizeChanged = useActionCreator(\n    Actions.browserWindowSizeChanged\n  );\n  const setFocusedWindow = useActionCreator(Actions.setFocusedWindow);\n\n  const [webampNode] = useState(() => {\n    const node = document.createElement(\"div\");\n    node.id = \"webamp\";\n    // @ts-ignore I think I'm supposed to set this with setAttribute, but I can't confirm.\n    node.role = \"application\";\n    return node;\n  });\n\n  useLayoutEffect(() => {\n    webampNode.style.zIndex = String(zIndex);\n  }, [webampNode, zIndex]);\n\n  useLayoutEffect(() => {\n    parentDomNode.appendChild(webampNode);\n    return () => {\n      parentDomNode.removeChild(webampNode);\n    };\n  }, [webampNode, parentDomNode]);\n\n  useEffect(() => {\n    const handleWindowResize = () => {\n      if (webampNode == null) {\n        return;\n      }\n      // It's a bit tricky to measure the \"natural\" size of the browser window.\n      // Specifically we want to know how large the window would be without our\n      // own Webamp windows influencing it. To achieve this, we temporarily make\n      // our container `overflow: hidden;`. We then make our container full\n      // screen by setting the bottom/right properties to zero. This second part\n      // allows our Webamp windows to stay visible during the resize. After we\n      // measure, we set the style back so that we don't end up interfering with\n      // click events outside of our Webamp windows.\n      webampNode.style.right = \"0\";\n      webampNode.style.bottom = \"0\";\n      webampNode.style.overflow = \"hidden\";\n      browserWindowSizeChanged(Utils.getWindowSize());\n      webampNode.style.right = \"auto\";\n      webampNode.style.bottom = \"auto\";\n      webampNode.style.overflow = \"visible\";\n    };\n\n    handleWindowResize();\n\n    window.addEventListener(\"resize\", handleWindowResize);\n\n    return () => {\n      window.removeEventListener(\"resize\", handleWindowResize);\n    };\n  }, [browserWindowSizeChanged, webampNode]);\n\n  useEffect(() => {\n    if (onMount != null) {\n      onMount();\n    }\n  }, [onMount]);\n\n  const renderWindows = useCallback(() => {\n    return Utils.objectMap(genWindowsInfo, (w, id) => {\n      if (!w.open) {\n        return null;\n      }\n      switch (id) {\n        case WINDOWS.MAIN:\n          return (\n            <MainWindow\n              analyser={media.getAnalyser()}\n              filePickers={filePickers}\n            />\n          );\n        case WINDOWS.EQUALIZER:\n          return <EqualizerWindow />;\n        case WINDOWS.PLAYLIST:\n          return <PlaylistWindow analyser={media.getAnalyser()} />;\n        case WINDOWS.MILKDROP:\n          return <MilkdropWindow analyser={media.getAnalyser()} />;\n        default:\n          throw new Error(`Tried to render an unknown window: ${id}`);\n      }\n    });\n  }, [media, filePickers, genWindowsInfo]);\n\n  const handleBlur = (e: React.FocusEvent<HTMLElement>) => {\n    if (!e.currentTarget.contains(e.relatedTarget as Element)) {\n      setFocusedWindow(null);\n    }\n  };\n\n  if (closed) {\n    return null;\n  }\n\n  return ReactDOM.createPortal(\n    <StrictMode>\n      <Css>{cssText}</Css>\n      <div onBlur={handleBlur}>\n        <Skin />\n        <ContextMenuWrapper\n          renderContents={() => <MainContextMenu filePickers={filePickers} />}\n        >\n          <WindowManager windows={renderWindows()} />\n        </ContextMenuWrapper>\n      </div>\n    </StrictMode>,\n    webampNode\n  );\n}\n","import {\n  play,\n  pause,\n  stop,\n  adjustVolume,\n  toggleRepeat,\n  toggleShuffle,\n  openMediaFileDialog,\n  seekForward,\n  seekBackward,\n  reverseList,\n  nextN,\n  next,\n  previous,\n  toggleDoubleSizeMode,\n  toggleWindow,\n} from \"./actionCreators\";\n\nimport { Dispatch } from \"./types\";\n\nconst IGNORE_EVENTS_FROM_TAGS = new Set([\"input\", \"textarea\", \"select\"]);\n\nexport function bindHotkeys(dispatch: Dispatch): () => void {\n  let currentPos: number = 0;\n  const trigger = [\n    78, // N\n    85, // U\n    76, // L\n    76, // L\n    83, // S\n    79, // O\n    70, // F\n    84, // T\n  ];\n\n  const listener = (e: KeyboardEvent) => {\n    if (\n      e.target instanceof Element &&\n      IGNORE_EVENTS_FROM_TAGS.has(e.target.tagName.toLowerCase())\n    ) {\n      return;\n    }\n    if (e.ctrlKey) {\n      switch (e.keyCode) {\n        case 68: // CTRL+D\n          dispatch(toggleDoubleSizeMode());\n          e.preventDefault(); // Supress the \"Bookmark\" action on windows.\n          break;\n        case 76: // CTRL+L FIXME\n          break;\n        case 82: // CTRL+R\n          dispatch(reverseList());\n          break;\n        case 84: // CTRL+T\n          dispatch({ type: \"TOGGLE_TIME_MODE\" });\n          break;\n      }\n    } else if (e.altKey) {\n      switch (e.keyCode) {\n        case 87: // ALT+W\n          dispatch(toggleWindow(\"main\"));\n          break;\n        case 69: // ALT+E\n          dispatch(toggleWindow(\"playlist\"));\n          break;\n        case 71: // ALT+G\n          dispatch(toggleWindow(\"equalizer\"));\n          break;\n      }\n    } else {\n      switch (e.keyCode) {\n        case 37: // left arrow\n          dispatch(seekBackward(5));\n          break;\n        case 38: // up arrow\n          dispatch(adjustVolume(1));\n          break;\n        case 39: // right arrow\n          dispatch(seekForward(5));\n          break;\n        case 40: // down arrow\n          dispatch(adjustVolume(-1));\n          break;\n        case 66: // B\n          dispatch(next());\n          break;\n        case 67: // C\n          dispatch(pause());\n          break;\n        case 76: // L\n          dispatch(openMediaFileDialog());\n          break;\n        case 82: // R\n          dispatch(toggleRepeat());\n          break;\n        case 83: // S\n          dispatch(toggleShuffle());\n          break;\n        case 86: // V\n          dispatch(stop());\n          break;\n        case 88: // X\n          dispatch(play());\n          break;\n        case 90: // Z\n          dispatch(previous());\n          break;\n        case 96: // numpad 0\n          dispatch(openMediaFileDialog());\n          break;\n        case 97: // numpad 1\n          dispatch(nextN(-10));\n          break;\n        case 98: // numpad 2\n          dispatch(adjustVolume(-1));\n          break;\n        case 99: // numpad 3\n          dispatch(nextN(10));\n          break;\n        case 100: // numpad 4\n          dispatch(previous());\n          break;\n        case 101: // numpad 5\n          dispatch(play());\n          break;\n        case 102: // numpad 6\n          dispatch(next());\n          break;\n        case 103: // numpad 7\n          dispatch(seekBackward(5));\n          break;\n        case 104: // numpad 8\n          dispatch(adjustVolume(1));\n          break;\n        case 105: // numpad 9\n          dispatch(seekForward(5));\n          break;\n      }\n    }\n\n    // Easter Egg\n\n    // Ignore escape. Usually this gets swallowed by the browser, but not always.\n    if (e.keyCode !== 27) {\n      currentPos = e.keyCode === trigger[currentPos] ? currentPos + 1 : 0;\n      if (currentPos === trigger.length) {\n        dispatch({ type: \"TOGGLE_LLAMA_MODE\" });\n      }\n    }\n  };\n  document.addEventListener(\"keydown\", listener);\n\n  return () => {\n    document.removeEventListener(\"keydown\", listener);\n  };\n}\n","export default class Emitter {\n  _listeners: { [event: string]: Array<(...args: any[]) => void> };\n\n  constructor() {\n    this._listeners = {};\n  }\n\n  on(event: string, callback: (...args: any[]) => void) {\n    const eventListeners = this._listeners[event] || [];\n    eventListeners.push(callback);\n    this._listeners[event] = eventListeners;\n    const unsubscribe = () => {\n      this._listeners[event] = eventListeners.filter((cb) => cb !== callback);\n    };\n    return unsubscribe;\n  }\n\n  trigger(event: string, ...args: any[]) {\n    const callbacks = this._listeners[event];\n    if (callbacks) {\n      callbacks.forEach((cb) => cb(...args));\n    }\n  }\n\n  dispose() {\n    this._listeners = {};\n  }\n}\n","type Teardown = (() => void) | { dispose: () => void };\n\nexport default class Disposable {\n  _teardowns: Teardown[] = [];\n  disposed: boolean;\n\n  constructor() {\n    this.disposed = false;\n  }\n\n  add(...teardowns: Teardown[]): void {\n    if (this.disposed) {\n      throw new Error(\n        \"Attempted to add a new teardown to a disposed disposable.\"\n      );\n    }\n    this._teardowns.push(...teardowns);\n  }\n\n  dispose() {\n    if (this.disposed) {\n      throw new Error(\n        \"Attempted to dispose disposable which is already disposed.\"\n      );\n    }\n    this._teardowns.forEach((teardown) => {\n      if (typeof teardown === \"function\") {\n        teardown();\n      } else if (typeof teardown.dispose === \"function\") {\n        teardown.dispose();\n      }\n    });\n    this._teardowns = [];\n    this.disposed = true;\n  }\n}\n","// The Web Audio API does not offer an easy way to make a stereo balance\n// control. This is an attempt to fill that void, using an API similar to\n// [StereoPannerNode](https://developer.mozilla.org/en-US/docs/Web/API/StereoPannerNode)\nexport default function StereoBalanceNode(context, options = { balance: 0 }) {\n  let balance = 0;\n\n  // ChannelSplitterNode cannot be told to use a `channelInterperatation` of\n  // \"speakers\". This means that if we get a mono file, we will end up only\n  // playing in the left speaker. So instead we use this dummy gain node to\n  // convert whatever source we get (stereo, mono, or n channels) into a stereo\n  // signal.\n  // Idea credit: https://github.com/WebAudio/web-audio-api/issues/975#issue-177242377\n  const upMixer = context.createGain();\n  upMixer.channelCount = 2;\n  upMixer.channelCountMode = \"explicit\";\n  upMixer.channelInterpretation = \"speakers\";\n\n  const splitter = context.createChannelSplitter(2);\n\n  // Create the gains for left and right\n  const leftGain = context.createGain();\n  const rightGain = context.createGain();\n\n  const merger = context.createChannelMerger(2);\n\n  upMixer.connect(splitter);\n\n  splitter.connect(leftGain, 0);\n  splitter.connect(rightGain, 1);\n\n  leftGain.connect(merger, 0, 0);\n  rightGain.connect(merger, 0, 1);\n\n  // -1 (left) to 1 (right)\n  function set(rawValue) {\n    const value = Number(rawValue);\n    leftGain.gain.value = value > 0 ? 1 - value : 1;\n    rightGain.gain.value = value > 0 ? 1 : 1 + value;\n    balance = value;\n  }\n\n  function get() {\n    return balance;\n  }\n\n  // Create our own version of an [AudioParam](https://developer.mozilla.org/en-US/docs/Web/API/AudioParam).\n  // We don't currently support any of the \"over time\" methods, but maybe some day\n  // we'll want to.\n  const audioParam = {};\n  Object.defineProperties(audioParam, {\n    value: { get, set, enumerable: true, configurable: true },\n  });\n\n  // The way the `.connect` API works, we can't actually construct our own\n  // AudioNode. Instead we have to take an existing node and monkey patch it.\n  Object.defineProperties(upMixer, {\n    balance: {\n      value: audioParam,\n      enumerable: true,\n      writable: false,\n      configurable: true,\n    },\n    connect: {\n      value: AudioNode.prototype.connect.bind(merger),\n      enumerable: false,\n      writable: false,\n      configurable: true,\n    },\n    disconnect: {\n      value: AudioNode.prototype.disconnect.bind(merger),\n      enumerable: false,\n      writable: false,\n      configurable: true,\n    },\n  });\n\n  if (balance !== options.balance) {\n    set(options.balance);\n  }\n\n  return upMixer;\n}\n","import Emitter from \"../emitter\";\nimport Disposable from \"../Disposable\";\nimport { clamp } from \"../utils\";\nimport { MEDIA_STATUS } from \"../constants\";\nimport { MediaStatus } from \"../types\";\n\nexport default class ElementSource {\n  _emitter: Emitter;\n  _context: AudioContext;\n  _source: AudioNode;\n  _destination: AudioNode;\n  _audio: HTMLAudioElement;\n  _stalled: boolean;\n  _status: MediaStatus;\n  _disposable: Disposable;\n\n  on(eventType: string, cb: (...args: any[]) => void) {\n    return this._emitter.on(eventType, cb);\n  }\n\n  constructor(context: AudioContext, destination: AudioNode) {\n    this._emitter = new Emitter();\n    this._context = context;\n    this._destination = destination;\n    this._audio = document.createElement(\"audio\");\n    this._audio.crossOrigin = \"anonymous\";\n    this._stalled = false;\n    this._status = MEDIA_STATUS.STOPPED;\n    this._disposable = new Disposable();\n\n    // Create event handlers and register cleanup\n    const suspendHandler = () => {\n      this._setStalled(true);\n    };\n    this._audio.addEventListener(\"suspend\", suspendHandler);\n    this._disposable.add(() =>\n      this._audio.removeEventListener(\"suspend\", suspendHandler)\n    );\n\n    const durationChangeHandler = () => {\n      this._emitter.trigger(\"loaded\");\n      this._setStalled(false);\n    };\n    this._audio.addEventListener(\"durationchange\", durationChangeHandler);\n    this._disposable.add(() =>\n      this._audio.removeEventListener(\"durationchange\", durationChangeHandler)\n    );\n\n    const endedHandler = () => {\n      this._emitter.trigger(\"ended\");\n      this._setStatus(MEDIA_STATUS.STOPPED);\n    };\n    this._audio.addEventListener(\"ended\", endedHandler);\n    this._disposable.add(() =>\n      this._audio.removeEventListener(\"ended\", endedHandler)\n    );\n\n    const timeUpdateHandler = () => {\n      this._emitter.trigger(\"positionChange\");\n    };\n    this._audio.addEventListener(\"timeupdate\", timeUpdateHandler);\n    this._disposable.add(() =>\n      this._audio.removeEventListener(\"timeupdate\", timeUpdateHandler)\n    );\n\n    const errorHandler = (e: Event) => {\n      switch (this._audio.error!.code) {\n        case 1:\n          // The fetching of the associated resource was aborted by the user's request.\n          console.error(\"MEDIA_ERR_ABORTED\", e);\n          break;\n        case 2:\n          console.error(\"MEDIA_ERR_NETWORK\", e);\n          // Some kind of network error occurred which prevented the media from being successfully fetched, despite having previously been available.\n          break;\n        case 3:\n          // Despite having previously been determined to be usable, an error occurred while trying to decode the media resource, resulting in an error.\n\n          // There is a bug in Chrome where improperly terminated mp3s can cuase this error.\n          // https://bugs.chromium.org/p/chromium/issues/detail?id=794782\n          // Related: Commit f44e826c83c74fef04c2c448af30cfb353b28312\n          console.error(\"PIPELINE_ERROR_DECODE\", e);\n          break;\n        case 4:\n          console.error(\"MEDIA_ERR_SRC_NOT_SUPPORTED\", e);\n          // The associated resource or media provider object (such as a MediaStream) has been found to be unsuitable.\n          break;\n      }\n      // Rather than just geting stuck in this error state, we can just pretend this is\n      // the end of the track.\n\n      this._emitter.trigger(\"ended\");\n      this._setStatus(MEDIA_STATUS.STOPPED);\n    };\n    this._audio.addEventListener(\"error\", errorHandler);\n    this._disposable.add(() =>\n      this._audio.removeEventListener(\"error\", errorHandler)\n    );\n\n    this._source = this._context.createMediaElementSource(this._audio);\n    this._source.connect(destination);\n  }\n\n  _setStalled(stalled: boolean) {\n    this._stalled = stalled;\n    this._emitter.trigger(\"stallChanged\");\n  }\n\n  disconnect() {\n    this._source.disconnect();\n  }\n\n  // Async for now, for compatibility with BufferAudioSource\n  // TODO: This does not need to be async\n  async loadUrl(url: string) {\n    this._audio.src = url;\n  }\n\n  async play() {\n    if (this._status !== MEDIA_STATUS.PAUSED) {\n      this.seekToTime(0);\n    }\n    try {\n      await this._audio.play();\n      // TODO #race\n    } catch (err) {\n      //\n    }\n    this._setStatus(MEDIA_STATUS.PLAYING);\n  }\n\n  pause() {\n    this._audio.pause();\n    this._setStatus(MEDIA_STATUS.PAUSED);\n  }\n\n  stop() {\n    this._audio.pause();\n    this._audio.currentTime = 0;\n    this._setStatus(MEDIA_STATUS.STOPPED);\n  }\n\n  seekToTime(time: number) {\n    /* TODO: We could check if this is actually seekable:\n    const { seekable } = this._audio;\n    for (let i = 0; i < seekable.length; i++) {\n      console.log(\"start\", seekable.start(i), \"end\", seekable.end(i));\n    }\n    */\n    this._audio.currentTime = clamp(time, 0, this.getDuration());\n    this._emitter.trigger(\"positionChange\");\n  }\n\n  getStalled() {\n    return this._stalled;\n  }\n\n  getStatus() {\n    return this._status;\n  }\n\n  getDuration() {\n    const { duration } = this._audio;\n    // Safari on iOS currently has a strange behavior where it reports\n    // the duration as infinity if an Accept-Ranges header is not returned.\n    // For now, 0 is better even though it's still wrong.\n    return isNaN(duration) || duration === Infinity ? 0 : duration;\n  }\n\n  getTimeElapsed() {\n    return this._audio.currentTime;\n  }\n\n  _setStatus(status: MediaStatus) {\n    this._status = status;\n    this._emitter.trigger(\"statusChange\");\n  }\n\n  dispose() {\n    // Clean up all event listeners via disposable\n    this._disposable.dispose();\n\n    this.stop();\n    this._emitter.dispose();\n  }\n}\n","/* Emulate the native <audio> element with Web Audio API */\nimport { BANDS, MEDIA_STATUS } from \"../constants\";\nimport { Band } from \"../types\";\nimport Emitter from \"../emitter\";\nimport Disposable from \"../Disposable\";\nimport StereoBalanceNode from \"./StereoBalanceNode\";\nimport ElementSource from \"./elementSource\";\n\ninterface StereoBalanceNodeType extends AudioNode {\n  constructor(context: AudioContext): StereoBalanceNodeType;\n  balance: {\n    value: number;\n  };\n}\n\nexport interface IMedia {\n  /**\n   * Set the volume from 0 to 100\n   */\n  setVolume(volume: number): void;\n  /**\n   * Set the stereo balance from -100 to 100\n   */\n  setBalance(balance: number): void;\n  /**\n   * Set the preamp value from 0 to 100\n   * The input value represents -12db to 12db, where 50 is 0db (no change)\n   * Equation used is: 10^((dB)/20) = x, where x is the gain value\n   */\n  setPreamp(value: number): void;\n  /**\n   * Register an event listener\n   */\n  on(event: string, callback: (...args: any[]) => void): void;\n  /**\n   * Get the current playback time in seconds\n   */\n  timeElapsed(): number;\n  /**\n   * Get the total duration of the current track in seconds\n   */\n  duration(): number;\n  /**\n   * Start or resume playback\n   */\n  play(): Promise<void>;\n  /**\n   * Pause playback\n   */\n  pause(): void;\n  /**\n   * Stop playback and reset position to beginning\n   */\n  stop(): void;\n  /**\n   * Seek to a specific position as a percentage of the total duration\n   */\n  seekToPercentComplete(percent: number): void;\n  /**\n   * Load a track from a URL and optionally start playing it\n   * Used only for the initial load, since it must have a CORS header\n   */\n  loadFromUrl(url: string, autoPlay: boolean): Promise<void>;\n  /**\n   * Set the gain value for a specific EQ band\n   */\n  setEqBand(band: Band, value: number): void;\n  /**\n   * Disable the equalizer by bypassing all EQ bands\n   */\n  disableEq(): void;\n  /**\n   * Enable the equalizer processing\n   */\n  enableEq(): void;\n  /**\n   * Get the analyser node for visualizer data\n   */\n  getAnalyser(): AnalyserNode;\n  /**\n   * Clean up resources and dispose of the media instance\n   */\n  dispose(): void;\n}\n\n// A constructable class that implements the IMedia interface.\nexport interface IMediaClass {\n  new (): IMedia;\n}\n\n// NOTE: While this is not technically a public API, https://winampify.io/ is\n// replacing this class with a custom version. Breaking changes to this API\n// surface should be communicated to Remi.\nexport default class Media implements IMedia {\n  _emitter: Emitter;\n  _context: AudioContext;\n  _balance: StereoBalanceNodeType;\n  _staticSource: GainNode;\n  _preamp: GainNode;\n  _analyser: AnalyserNode;\n  _gainNode: GainNode;\n  _source: ElementSource;\n  _bands: { [band: number]: BiquadFilterNode };\n  _disposable: Disposable;\n\n  constructor() {\n    this._emitter = new Emitter();\n    this._disposable = new Disposable();\n    // @ts-ignore Typescript does not know about webkitAudioContext\n    this._context = new (window.AudioContext || window.webkitAudioContext)();\n    // Fix for iOS and Chrome (Canary) which require that the context be created\n    // or resumed by a user interaction.\n    // https://developers.google.com/web/updates/2017/09/autoplay-policy-changes\n    // https://gist.github.com/laziel/7aefabe99ee57b16081c\n    // Via: https://stackoverflow.com/a/43395068/1263117\n    if (this._context.state === \"suspended\") {\n      const resumeHandler = async () => {\n        await this._context.resume();\n\n        if (this._context.state === \"running\") {\n          document.body.removeEventListener(\"touchend\", resumeHandler, false);\n          document.body.removeEventListener(\"click\", resumeHandler, false);\n          document.body.removeEventListener(\"keydown\", resumeHandler, false);\n        }\n      };\n\n      document.body.addEventListener(\"touchend\", resumeHandler, false);\n      document.body.addEventListener(\"click\", resumeHandler, false);\n      document.body.addEventListener(\"keydown\", resumeHandler, false);\n\n      // Add cleanup for resume handlers\n      this._disposable.add(() => {\n        document.body.removeEventListener(\"touchend\", resumeHandler, false);\n        document.body.removeEventListener(\"click\", resumeHandler, false);\n        document.body.removeEventListener(\"keydown\", resumeHandler, false);\n      });\n    }\n\n    // TODO: Maybe we can get rid of this now that we are using AudioAbstraction?\n    this._staticSource = this._context.createGain(); // Just a noop node\n\n    // @ts-ignore The way this class has to be monkey patched, makes it very hard to type.\n    this._balance = new StereoBalanceNode(this._context);\n\n    // Create the preamp node\n    this._preamp = this._context.createGain();\n\n    // Create the analyser node for the visualizer\n    this._analyser = this._context.createAnalyser();\n    this._analyser.fftSize = 2048;\n    // don't smooth audio analysis\n    this._analyser.smoothingTimeConstant = 0.0;\n\n    // Create the gain node for the volume control\n    this._gainNode = this._context.createGain();\n\n    // Connect all the nodes in the correct way\n    // (Note, source is created and connected later)\n    //\n    //                <source>\n    //                    |\n    //                    |_____________\n    //                    |             \\\n    //                <preamp>          |\n    //                    |             | <-- Optional bypass\n    //           [...biquadFilters]     |\n    //                    |_____________/\n    //                    |\n    //              <staticSource>\n    //                    |\n    //                <balance>\n    //                    |\n    //                    |\\\n    //                    | <analyser>\n    //                  <gain>\n    //                    |\n    //              <destination>\n\n    this._source = new ElementSource(this._context, this._staticSource);\n\n    this._source.on(\"positionChange\", () => {\n      this._emitter.trigger(\"timeupdate\");\n    });\n    this._source.on(\"ended\", () => {\n      this._emitter.trigger(\"ended\");\n    });\n    this._source.on(\"statusChange\", () => {\n      switch (this._source.getStatus()) {\n        case MEDIA_STATUS.PLAYING:\n          this._emitter.trigger(\"playing\");\n          break;\n      }\n      this._emitter.trigger(\"timeupdate\");\n    });\n    this._source.on(\"loaded\", () => {\n      this._emitter.trigger(\"fileLoaded\");\n    });\n\n    this._staticSource.connect(this._preamp);\n\n    let output = this._preamp;\n    this._bands = {};\n\n    BANDS.forEach((band, i) => {\n      const filter = this._context.createBiquadFilter();\n\n      this._bands[band] = filter;\n\n      if (i === 0) {\n        // The first filter, includes all lower frequencies\n        filter.type = \"lowshelf\";\n      } else if (i === BANDS.length - 1) {\n        // The last filter, includes all higher frequencies\n        filter.type = \"highshelf\";\n      } else {\n        filter.type = \"peaking\";\n      }\n      filter.frequency.value = band;\n      filter.gain.value = 0;\n\n      output.connect(filter);\n      output = filter;\n    });\n\n    output.connect(this._balance);\n\n    this._balance.connect(this._gainNode);\n    this._balance.connect(this._analyser);\n\n    this._gainNode.connect(this._context.destination);\n  }\n\n  getAnalyser() {\n    return this._analyser;\n  }\n\n  /* Properties */\n  duration() {\n    return this._source.getDuration();\n  }\n\n  timeElapsed() {\n    return this._source.getTimeElapsed();\n  }\n\n  timeRemaining() {\n    return this.duration() - this.timeElapsed();\n  }\n\n  percentComplete() {\n    return (this.timeElapsed() / this.duration()) * 100;\n  }\n\n  /* Actions */\n  async play() {\n    await this._source.play();\n  }\n\n  pause() {\n    this._source.pause();\n  }\n\n  stop() {\n    this._source.stop();\n  }\n\n  /* Actions with arguments */\n  seekToPercentComplete(percent: number) {\n    const seekTime = this.duration() * (percent / 100);\n    this.seekToTime(seekTime);\n  }\n\n  // From 0-1\n  setVolume(volume: number) {\n    this._gainNode.gain.value = volume / 100;\n  }\n\n  // from 0 to 100\n  // The input value here is 0-100 which is kinda wrong, since it represents -12db to 12db.\n  // For now, 50 is 0db (no change).\n  // Equation used is: 10^((dB)/20) = x, where x (preamp.gain.value) is passed on to gainnode for boosting or attenuation.\n  setPreamp(value: number) {\n    const db = (value / 100) * 24 - 12;\n    this._preamp.gain.value = Math.pow(10, db / 20);\n  }\n\n  // From -100 to 100\n  setBalance(balance: number) {\n    // Yo Dawg.\n    this._balance.balance.value = balance / 100;\n  }\n\n  setEqBand(band: Band, value: number) {\n    const db = (value / 100) * 24 - 12;\n    this._bands[band].gain.value = db;\n  }\n\n  disableEq() {\n    this._staticSource.disconnect();\n    this._staticSource.connect(this._balance);\n  }\n\n  enableEq() {\n    this._staticSource.disconnect();\n    this._staticSource.connect(this._preamp);\n  }\n\n  /* Listeners */\n  on(event: string, callback: (...args: any[]) => void) {\n    this._emitter.on(event, callback);\n  }\n\n  seekToTime(time: number) {\n    this._source.seekToTime(time);\n  }\n\n  // Used only for the initial load, since it must have a CORS header\n  async loadFromUrl(url: string, autoPlay: boolean) {\n    this._emitter.trigger(\"waiting\");\n    await this._source.loadUrl(url);\n    // TODO #race\n    this._emitter.trigger(\"stopWaiting\");\n    if (autoPlay) {\n      this.play();\n    }\n  }\n\n  dispose() {\n    // Clean up all event listeners via disposable\n    this._disposable.dispose();\n\n    this._source.dispose();\n    this._emitter.dispose();\n  }\n}\n","import * as React from \"react\";\nimport type JSZip from \"jszip\";\nimport ReactDOM from \"react-dom/client\";\nimport { Provider } from \"react-redux\";\n\nimport {\n  Store,\n  AppState,\n  Track,\n  LoadedURLTrack,\n  Middleware,\n  ButterchurnOptions,\n  PartialState,\n  Options,\n  MediaStatus,\n  PlaylistTrack,\n  PlayerMediaStatus,\n  IMetadataApi,\n} from \"./types\";\nimport getStore from \"./store\";\nimport App from \"./components/App\";\nimport { bindHotkeys } from \"./hotkeys\";\nimport Media, { IMedia, IMediaClass } from \"./media\";\nimport * as Selectors from \"./selectors\";\nimport * as Actions from \"./actionCreators\";\n\nimport { LOAD_STYLE } from \"./constants\";\nimport * as FileUtils from \"./fileUtils\";\n\nimport Emitter from \"./emitter\";\n\nimport { SerializedStateV1 } from \"./serializedStates/v1Types\";\nimport Disposable from \"./Disposable\";\nimport enableMediaSession from \"./mediaSession.js\";\n\nexport interface PrivateOptions {\n  __initialState?: PartialState;\n  __customMiddlewares?: Middleware[];\n  __butterchurnOptions?: ButterchurnOptions;\n  // This is used by https://winampify.io/ to proxy through to Spotify's API.\n  __customMediaClass?: IMediaClass;\n}\n\nexport interface InjectableDependencies {\n  requireJSZip: () => Promise<JSZip>;\n  requireMusicMetadata: () => Promise<IMetadataApi>;\n}\n\nclass Webamp {\n  static VERSION = \"2.2.0\";\n  _actionEmitter: Emitter;\n  _root: ReactDOM.Root | null;\n  _disposable: Disposable;\n  options: Options & PrivateOptions & InjectableDependencies; // TODO: Make this _private\n  media: IMedia; // TODO: Make this _private\n  store: Store; // TODO: Make this _private\n\n  /**\n   * Returns a true if the current browser supports the features that Webamp depends upon.\n   *\n   * It is recommended to check this before you attempt to instantiate an instance of Winamp.\n   */\n  static browserIsSupported(): boolean {\n    const supportsAudioApi = !!(\n      window.AudioContext ||\n      // @ts-ignore\n      window.webkitAudioContext\n    );\n    const supportsCanvas = !!window.document.createElement(\"canvas\").getContext;\n    const supportsPromises = typeof Promise !== \"undefined\";\n    return supportsAudioApi && supportsCanvas && supportsPromises;\n  }\n\n  constructor(options: Options & PrivateOptions & InjectableDependencies) {\n    this._root = null;\n    this._disposable = new Disposable();\n    this._actionEmitter = new Emitter();\n    this.options = options;\n    const {\n      initialTracks,\n      initialSkin,\n      availableSkins,\n      enableHotkeys = false,\n      zIndex,\n      requireJSZip,\n      requireMusicMetadata,\n      handleTrackDropEvent,\n      handleAddUrlEvent,\n      handleLoadListEvent,\n      handleSaveListEvent,\n      enableDoubleSizeMode,\n      __butterchurnOptions,\n      __customMediaClass,\n    } = this.options;\n\n    // TODO: Make this much cleaner.\n    let convertPreset = null;\n    if (__butterchurnOptions != null) {\n      const { importConvertPreset, presetConverterEndpoint } =\n        __butterchurnOptions;\n\n      if (importConvertPreset != null && presetConverterEndpoint != null) {\n        convertPreset = async (file: File): Promise<Object> => {\n          const { convertPreset: convert } = await importConvertPreset();\n          return convert(\n            await FileUtils.genStringFromFileReference(file),\n            presetConverterEndpoint\n          );\n        };\n      }\n    }\n\n    // TODO: Validate required options.\n\n    this.media = new (__customMediaClass || Media)();\n    this.store = getStore(\n      this.media,\n      this._actionEmitter,\n      this.options.__customMiddlewares,\n      this.options.__initialState,\n      {\n        requireJSZip,\n        requireMusicMetadata,\n        convertPreset,\n        // @ts-ignore Typescript is drunk.\n        handleTrackDropEvent,\n        handleAddUrlEvent,\n        handleLoadListEvent,\n        handleSaveListEvent,\n      }\n    ) as Store;\n\n    if (options.enableMediaSession) {\n      enableMediaSession(this);\n    }\n\n    if (enableDoubleSizeMode) {\n      this.store.dispatch(Actions.toggleDoubleSizeMode());\n    }\n\n    if (navigator.onLine) {\n      this.store.dispatch({ type: \"NETWORK_CONNECTED\" });\n    } else {\n      this.store.dispatch({ type: \"NETWORK_DISCONNECTED\" });\n    }\n\n    if (zIndex != null) {\n      this.store.dispatch({ type: \"SET_Z_INDEX\", zIndex });\n    }\n\n    if (options.__butterchurnOptions) {\n      this.store.dispatch({\n        type: \"ENABLE_MILKDROP\",\n        open: options.__butterchurnOptions.butterchurnOpen,\n      });\n      this.store.dispatch(\n        Actions.initializePresets(options.__butterchurnOptions)\n      );\n    }\n\n    const handleOnline = () =>\n      this.store.dispatch({ type: \"NETWORK_CONNECTED\" });\n    const handleOffline = () =>\n      this.store.dispatch({ type: \"NETWORK_DISCONNECTED\" });\n\n    window.addEventListener(\"online\", handleOnline);\n    window.addEventListener(\"offline\", handleOffline);\n\n    this._disposable.add(() => {\n      window.removeEventListener(\"online\", handleOnline);\n      window.removeEventListener(\"offline\", handleOffline);\n    });\n\n    if (initialSkin) {\n      this.store.dispatch(Actions.setSkinFromUrl(initialSkin.url));\n    } else {\n      // We are using the default skin.\n      this.store.dispatch({ type: \"LOADED\" });\n    }\n\n    if (initialTracks) {\n      this._bufferTracks(initialTracks);\n    }\n\n    // @ts-ignore\n    if (options.avaliableSkins != null) {\n      console.warn(\n        \"The misspelled option `avaliableSkins` is deprecated. Please use `availableSkins` instead.\"\n      );\n      // @ts-ignore\n      this.store.dispatch({\n        type: \"SET_AVAILABLE_SKINS\",\n        // @ts-ignore\n        skins: options.avaliableSkins,\n      });\n    } else if (availableSkins != null) {\n      this.store.dispatch({\n        type: \"SET_AVAILABLE_SKINS\",\n        skins: availableSkins,\n      });\n    }\n\n    this.store.dispatch(Actions.setWindowLayout(options.windowLayout));\n\n    if (enableHotkeys) {\n      this._disposable.add(bindHotkeys(this.store.dispatch));\n    }\n  }\n\n  /**\n   * Play the current track.\n   */\n  play(): void {\n    this.store.dispatch(Actions.play());\n  }\n\n  /**\n   * Pause the current track.\n   */\n  pause(): void {\n    this.store.dispatch(Actions.pause());\n  }\n\n  /**\n   * Stop the currently playing audio. Equivalent to pressing the \"stop\" button.\n   */\n  stop(): void {\n    this.store.dispatch(Actions.stop());\n  }\n\n  /**\n   * Set volume from 0 - 100.\n   */\n  setVolume(volume: number): void {\n    this.store.dispatch(Actions.setVolume(volume));\n  }\n\n  /**\n   * Seek backward n seconds in the current track.\n   */\n  seekBackward(seconds: number) {\n    this.store.dispatch(Actions.seekBackward(seconds));\n  }\n\n  /**\n   * Seek forward n seconds in the current track.\n   */\n  seekForward(seconds: number) {\n    this.store.dispatch(Actions.seekForward(seconds));\n  }\n\n  /**\n   * Seek to a given time within the current track.\n   */\n  seekToTime(seconds: number) {\n    this.store.dispatch(Actions.seekToTime(seconds));\n  }\n\n  /**\n   * Check if shuffle is enabled.\n   */\n  isShuffleEnabled(): boolean {\n    return Selectors.getShuffle(this.store.getState());\n  }\n\n  /**\n   * Toggle shuffle mode between enabled and disabled.\n   */\n  toggleShuffle(): void {\n    this.store.dispatch(Actions.toggleShuffle());\n  }\n\n  /**\n   * Check if repeat is enabled.\n   */\n  isRepeatEnabled(): boolean {\n    return Selectors.getRepeat(this.store.getState());\n  }\n\n  /**\n   * Toggle repeat mode between enabled and disabled.\n   */\n  toggleRepeat(): void {\n    this.store.dispatch(Actions.toggleRepeat());\n  }\n\n  /**\n   * Play the next track.\n   */\n  nextTrack(): void {\n    this.store.dispatch(Actions.next());\n  }\n\n  /**\n   * Play the previous track.\n   */\n  previousTrack(): void {\n    this.store.dispatch(Actions.previous());\n  }\n\n  /**\n   * Set the current track to a specific track in the playlist by zero-based index.\n   *\n   * Note: If Webamp is currently playing, the track will begin playing. If\n   * Webamp is not playing, the track will not start playing. You can use\n   * `webamp.pause()` before calling this method or `webamp.play()` after\n   * calling this method to control whether the track starts playing.\n   */\n  setCurrentTrack(index: number): void {\n    this.store.dispatch(Actions.playTrack(index));\n  }\n\n  /**\n   * Add an array of `Track`s to the end of the playlist.\n   */\n  appendTracks(tracks: Track[]): void {\n    const nextIndex = Selectors.getTrackCount(this.store.getState());\n    this.store.dispatch(\n      Actions.loadMediaFiles(tracks, LOAD_STYLE.NONE, nextIndex)\n    );\n  }\n\n  /**\n   * Replace the playlist with an array of `Track`s and begin playing the first track.\n   */\n  setTracksToPlay(tracks: Track[]): void {\n    this.store.dispatch(Actions.loadMediaFiles(tracks, LOAD_STYLE.PLAY));\n  }\n\n  /**\n   * Get the current playlist in order.\n   */\n  getPlaylistTracks(): PlaylistTrack[] {\n    return Selectors.getPlaylistTracks(this.store.getState());\n  }\n\n  /**\n   * Get the current \"playing\" status.\n   */\n  getMediaStatus(): MediaStatus {\n    return Selectors.getMediaStatus(this.store.getState());\n  }\n\n  /**\n   * Get the current \"playing\" status of the player. Similar to\n   * `getMediaStatus()`, but can differentiate between different reasons why the\n   * player might not be playing, such as \"ENDED\" when the end of the playlist\n   * has been reached or \"CLOSED\" when the player has been closed.\n   */\n  getPlayerMediaStatus(): PlayerMediaStatus {\n    return Selectors.getPlayerMediaStatus(this.store.getState());\n  }\n\n  /**\n   * A callback which will be called when Webamp is _about to_ close. Returns an\n   * \"unsubscribe\" function. The callback will be passed a `cancel` function\n   * which you can use to conditionally prevent Webamp from being closed.\n   *\n   * @returns An \"unsubscribe\" function. Useful if at some point in the future you want to stop listening to these events.\n   */\n  onWillClose(cb: (cancel: () => void) => void): () => void {\n    return this._actionEmitter.on(\"CLOSE_REQUESTED\", (action) => {\n      cb((action as any).cancel);\n    });\n  }\n\n  /**\n   * A callback which will be called when Webamp is closed.\n   *\n   * @returns An \"unsubscribe\" function. Useful if at some point in the future you want to stop listening to these events.\n   */\n  onClose(cb: () => void): () => void {\n    return this._actionEmitter.on(\"CLOSE_WINAMP\", cb);\n  }\n\n  /**\n   * Equivalent to selecting \"Close\" from Webamp's options menu. Once closed,\n   * you can open it again with `.reopen()`.\n   */\n  close(): void {\n    this.store.dispatch(Actions.close());\n  }\n\n  /**\n   * After `.close()`ing this instance, you can reopen it by calling this method.\n   */\n  reopen(): void {\n    this.store.dispatch(Actions.open());\n  }\n\n  /**\n   * A callback which will be called when a new track starts loading.\n   *\n   * This can happen on startup when the first track starts buffering, or when a\n   * subsequent track starts playing.  The callback will be called with an\n   * object `({url: 'https://example.com/track.mp3'})` containing the URL of the\n   * track.\n   *\n   * Note: If the user drags in a track, the URL may be an ObjectURL.\n   *\n   * @returns An \"unsubscribe\" function. Useful if at some point in the future\n   * you want to stop listening to these events.\n   */\n  onTrackDidChange(cb: (trackInfo: LoadedURLTrack | null) => void): () => void {\n    let previousTrackId: number | null = null;\n    const unsubscribe = this.store.subscribe(() => {\n      const state = this.store.getState();\n      const trackId = Selectors.getCurrentlyPlayingTrackIdIfLoaded(state);\n      if (trackId === previousTrackId) {\n        return;\n      }\n      previousTrackId = trackId;\n      cb(trackId == null ? null : Selectors.getCurrentTrackInfo(state));\n    });\n\n    // Register cleanup with disposable\n    this._disposable.add(unsubscribe);\n\n    return unsubscribe;\n  }\n\n  /**\n   * A callback which will be called when Webamp is minimized.\n   *\n   * @returns An \"unsubscribe\" function. Useful if at some point in the future you want to stop listening to these events.\n   */\n  onMinimize(cb: () => void): () => void {\n    return this._actionEmitter.on(\"MINIMIZE_WINAMP\", cb);\n  }\n\n  /**\n   * Set the skin to use. This can be a URL or a base64 encoded string. The skin\n   * will be loaded asynchronously.\n   *\n   * NOTE: If the URL is not on the same domain as the page, you will need to consider CORS.\n   * https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS\n   */\n  setSkinFromUrl(url: string): void {\n    this.store.dispatch(Actions.setSkinFromUrl(url));\n    // TODO: Should this return a promise?\n    // return this.skinIsLoaded(); ??\n  }\n\n  /**\n   * Returns a promise that resolves when the skin is done loading.\n   */\n  async skinIsLoaded(): Promise<void> {\n    // Wait for the skin to load.\n    await this.storeHas((state) => !state.display.loading);\n    // We attempt to pre-resolve these promises before we declare the skin\n    // loaded. That's because `<EqGraph>` needs these in order to render fully.\n    // As long as these are resolved before we attempt to render, we can ensure\n    // that we will have all the data we need on first paint.\n    //\n    // Note: This won't help for non-initial skin loads.\n    await Promise.all([\n      Selectors.getPreampLineImage(this.store.getState()),\n      Selectors.getLineColorsImage(this.store.getState()),\n    ]);\n    return;\n  }\n\n  /**\n   * Webamp will wait until it has fetched the skin and fully parsed it and then render itself.\n   *\n   * Webamp is rendered into a new DOM node at the end of the <body> tag with the id `#webamp`.\n   *\n   * If a domNode is passed, Webamp will place itself in the center of that DOM node.\n   *\n   * @returns A promise is returned which will resolve after the render is complete.\n   */\n  async renderWhenReady(node: HTMLElement): Promise<void> {\n    this.store.dispatch(Actions.centerWindowsInContainer(node));\n    await this.skinIsLoaded();\n    if (this._disposable.disposed) {\n      return;\n    }\n    if (this._root != null) {\n      throw new Error(\"Cannot render a Webamp instance twice\");\n    }\n    this._root = ReactDOM.createRoot(node);\n    this._disposable.add(() => {\n      if (this._root != null) {\n        this._root.unmount();\n        this._root = null;\n      }\n    });\n\n    let onMount: (() => void) | undefined;\n    const mountPromise = new Promise<void>((resolve) => {\n      onMount = resolve;\n    });\n\n    this._root.render(\n      <Provider store={this.store}>\n        <App\n          media={this.media}\n          filePickers={this.options.filePickers || []}\n          onMount={onMount}\n          parentDomNode={document.body}\n        />\n      </Provider>\n    );\n    await mountPromise;\n  }\n\n  /**\n   * **Note:** _This method is not fully functional. It is currently impossible to\n   * clean up a Winamp instance. This method makes an effort, but it still leaks\n   * the whole instance. In the future the behavior of this method will improve,\n   * so you might as well call it._\n   *\n   * When you are done with a Webamp instance, call this method and Webamp will\n   * attempt to clean itself up to avoid memory leaks.\n   */\n  dispose(): void {\n    this.media.dispose();\n    this._actionEmitter.dispose();\n    this._disposable.dispose();\n  }\n\n  __loadSerializedState(serializedState: SerializedStateV1): void {\n    this.store.dispatch(Actions.loadSerializedState(serializedState));\n  }\n\n  __getSerializedState() {\n    return Selectors.getSerlializedState(this.store.getState());\n  }\n\n  __onStateChange(cb: () => void): () => void {\n    const unsubscribe = this.store.subscribe(cb);\n\n    // Register cleanup with disposable\n    this._disposable.add(unsubscribe);\n\n    return unsubscribe;\n  }\n\n  /**\n   * Wait for the store to match a predicate condition.\n   * Returns a promise that resolves when the condition is met.\n   * If the instance is disposed, the promise will be rejected.\n   */\n  private storeHas(predicate: (state: AppState) => boolean): Promise<void> {\n    let unsubscribed = false;\n    return new Promise((resolve, reject) => {\n      if (predicate(this.store.getState())) {\n        resolve();\n        return;\n      }\n      const unsubscribe = this.store.subscribe(() => {\n        if (predicate(this.store.getState())) {\n          unsubscribed = true;\n          unsubscribe();\n          resolve();\n        }\n      });\n\n      // Register cleanup with disposable\n      this._disposable.add(() => {\n        if (!unsubscribed) {\n          unsubscribe();\n          reject(new Error(\"Store was disposed before condition was met.\"));\n        }\n      });\n    });\n  }\n\n  _bufferTracks(tracks: Track[]): void {\n    const nextIndex = Selectors.getTrackCount(this.store.getState());\n    this.store.dispatch(\n      Actions.loadMediaFiles(tracks, LOAD_STYLE.BUFFER, nextIndex)\n    );\n  }\n}\n\n// @ts-ignore\nwindow.Webamp = Webamp;\n\nexport default Webamp;\n","import type WebampLazy from \"./webampLazy\";\n\nexport default function enableMediaSession(webamp: WebampLazy) {\n  if (\"mediaSession\" in navigator) {\n    /* global MediaMetadata */\n    webamp.onTrackDidChange((track) => {\n      if (track == null) {\n        return;\n      }\n      const {\n        metaData: { title, artist, album, albumArtUrl },\n      } = track;\n      navigator.mediaSession.metadata = new MediaMetadata({\n        title: title ?? undefined,\n        artist: artist ?? undefined,\n        album: album ?? undefined,\n        artwork: albumArtUrl\n          ? [\n              {\n                src: albumArtUrl,\n                // We don't currently know these.\n                // sizes: \"96x96\",\n                // type: \"image/png\"\n              },\n            ]\n          : [],\n      });\n    });\n\n    // @ts-ignore TypeScript does not know about the Media Session API: https://github.com/Microsoft/TypeScript/issues/19473\n    navigator.mediaSession.setActionHandler(\"play\", () => {\n      webamp.play();\n    });\n    // @ts-ignore TypeScript does not know about the Media Session API: https://github.com/Microsoft/TypeScript/issues/19473\n    navigator.mediaSession.setActionHandler(\"pause\", () => {\n      webamp.pause();\n    });\n    // @ts-ignore TypeScript does not know about the Media Session API: https://github.com/Microsoft/TypeScript/issues/19473\n    navigator.mediaSession.setActionHandler(\"seekbackward\", () => {\n      webamp.seekBackward(10);\n    });\n    // @ts-ignore TypeScript does not know about the Media Session API: https://github.com/Microsoft/TypeScript/issues/19473\n    navigator.mediaSession.setActionHandler(\"seekforward\", () => {\n      webamp.seekForward(10);\n    });\n    // @ts-ignore TypeScript does not know about the Media Session API: https://github.com/Microsoft/TypeScript/issues/19473\n    navigator.mediaSession.setActionHandler(\"previoustrack\", () => {\n      webamp.previousTrack();\n    });\n    // @ts-ignore TypeScript does not know about the Media Session API: https://github.com/Microsoft/TypeScript/issues/19473\n    navigator.mediaSession.setActionHandler(\"nexttrack\", () => {\n      webamp.nextTrack();\n    });\n  }\n}\n","// A Fork of the NPM module `setimmediate`\n// I've adapted this to only include the browser implementation and to not\n// mutate the global object and instead export the `setImmediate` function.\n\ntype Handle = { callback: Function; args: any[] };\ntype TaskByHandle = { [handle: number]: Handle };\n\nlet nextHandle = 1; // Spec says greater than zero\nconst tasksByHandle: TaskByHandle = {};\nlet currentlyRunningATask = false;\nlet registerImmediate: (arg0: number) => void;\n\nexport function setImmediate(callback: Function) {\n  // Copy function arguments\n  const args = new Array(arguments.length - 1);\n  for (let i = 0; i < args.length; i++) {\n    args[i] = arguments[i + 1];\n  }\n  // Store and register the task\n  const task = { callback: callback, args: args };\n  tasksByHandle[nextHandle] = task;\n  registerImmediate(nextHandle);\n  return nextHandle++;\n}\n\nfunction clearImmediate(handle: number) {\n  delete tasksByHandle[handle];\n}\n\nfunction run(task: Handle) {\n  const callback = task.callback;\n  const args = task.args;\n  switch (args.length) {\n    case 0:\n      callback();\n      break;\n    case 1:\n      callback(args[0]);\n      break;\n    case 2:\n      callback(args[0], args[1]);\n      break;\n    case 3:\n      callback(args[0], args[1], args[2]);\n      break;\n    default:\n      // eslint-disable-next-line prefer-spread\n      callback.apply(undefined, args);\n      break;\n  }\n}\n\nfunction runIfPresent(handle: number) {\n  // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n  // So if we're currently running a task, we'll need to delay this invocation.\n  if (currentlyRunningATask) {\n    // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n    // \"too much recursion\" error.\n    setTimeout(runIfPresent, 0, handle);\n  } else {\n    const task = tasksByHandle[handle];\n    if (task) {\n      currentlyRunningATask = true;\n      try {\n        run(task);\n      } finally {\n        clearImmediate(handle);\n        currentlyRunningATask = false;\n      }\n    }\n  }\n}\n\nfunction canUsePostMessage() {\n  // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n  // where `global.postMessage` means something completely different and can't be used for this purpose.\n  if (!window.importScripts) {\n    let postMessageIsAsynchronous = true;\n    const oldOnMessage = window.onmessage;\n    window.onmessage = function () {\n      postMessageIsAsynchronous = false;\n    };\n    window.postMessage(\"\", \"*\");\n    window.onmessage = oldOnMessage;\n    return postMessageIsAsynchronous;\n  }\n}\n\nfunction installPostMessageImplementation() {\n  // Installs an event handler on `global` for the `message` event: see\n  // * https://developer.mozilla.org/en/DOM/window.postMessage\n  // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n  const messagePrefix = `setImmediate$${Math.random()}$`;\n\n  window.addEventListener(\n    \"message\",\n    (event) => {\n      if (\n        event.source === window &&\n        typeof event.data === \"string\" &&\n        event.data.indexOf(messagePrefix) === 0\n      ) {\n        runIfPresent(+event.data.slice(messagePrefix.length));\n      }\n    },\n    false\n  );\n\n  registerImmediate = function (handle) {\n    window.postMessage(messagePrefix + handle, \"*\");\n  };\n}\n\nfunction installSetTimeoutImplementation() {\n  registerImmediate = function (handle) {\n    setTimeout(runIfPresent, 0, handle);\n  };\n}\n\nif (canUsePostMessage()) {\n  // For non-IE10 modern browsers\n  installPostMessageImplementation();\n} else {\n  // For older browsers\n  installSetTimeoutImplementation();\n}\n","\"use strict\";\n\nexports.base64 = true;\nexports.array = true;\nexports.string = true;\nexports.arraybuffer = typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\";\nexports.nodebuffer = typeof Buffer !== \"undefined\";\n// contains true if JSZip can read/generate Uint8Array, false otherwise.\nexports.uint8array = typeof Uint8Array !== \"undefined\";\n\nif (typeof ArrayBuffer === \"undefined\") {\n    exports.blob = false;\n}\nelse {\n    var buffer = new ArrayBuffer(0);\n    try {\n        exports.blob = new Blob([buffer], {\n            type: \"application/zip\"\n        }).size === 0;\n    }\n    catch (e) {\n        try {\n            var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n            var builder = new Builder();\n            builder.append(buffer);\n            exports.blob = builder.getBlob(\"application/zip\").size === 0;\n        }\n        catch (e) {\n            exports.blob = false;\n        }\n    }\n}\n\ntry {\n    exports.nodestream = !!require(\"readable-stream\").Readable;\n} catch(e) {\n    exports.nodestream = false;\n}\n","\"use strict\";\n/*\n * This file is used by module bundlers (browserify/webpack/etc) when\n * including a stream implementation. We use \"readable-stream\" to get a\n * consistent behavior between nodejs versions but bundlers often have a shim\n * for \"stream\". Using this shim greatly improve the compatibility and greatly\n * reduce the final size of the bundle (only one stream implementation, not\n * two).\n */\nmodule.exports = require(\"stream\");\n","\"use strict\";\nvar utils = require(\"./utils\");\nvar support = require(\"./support\");\n// private property\nvar _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n\n// public method for encoding\nexports.encode = function(input) {\n    var output = [];\n    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n    var i = 0, len = input.length, remainingBytes = len;\n\n    var isArray = utils.getTypeOf(input) !== \"string\";\n    while (i < input.length) {\n        remainingBytes = len - i;\n\n        if (!isArray) {\n            chr1 = input.charCodeAt(i++);\n            chr2 = i < len ? input.charCodeAt(i++) : 0;\n            chr3 = i < len ? input.charCodeAt(i++) : 0;\n        } else {\n            chr1 = input[i++];\n            chr2 = i < len ? input[i++] : 0;\n            chr3 = i < len ? input[i++] : 0;\n        }\n\n        enc1 = chr1 >> 2;\n        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n        enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64;\n        enc4 = remainingBytes > 2 ? (chr3 & 63) : 64;\n\n        output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4));\n\n    }\n\n    return output.join(\"\");\n};\n\n// public method for decoding\nexports.decode = function(input) {\n    var chr1, chr2, chr3;\n    var enc1, enc2, enc3, enc4;\n    var i = 0, resultIndex = 0;\n\n    var dataUrlPrefix = \"data:\";\n\n    if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) {\n        // This is a common error: people give a data url\n        // (data:image/png;base64,iVBOR...) with a {base64: true} and\n        // wonders why things don't work.\n        // We can detect that the string input looks like a data url but we\n        // *can't* be sure it is one: removing everything up to the comma would\n        // be too dangerous.\n        throw new Error(\"Invalid base64 input, it looks like a data url.\");\n    }\n\n    input = input.replace(/[^A-Za-z0-9+/=]/g, \"\");\n\n    var totalLength = input.length * 3 / 4;\n    if(input.charAt(input.length - 1) === _keyStr.charAt(64)) {\n        totalLength--;\n    }\n    if(input.charAt(input.length - 2) === _keyStr.charAt(64)) {\n        totalLength--;\n    }\n    if (totalLength % 1 !== 0) {\n        // totalLength is not an integer, the length does not match a valid\n        // base64 content. That can happen if:\n        // - the input is not a base64 content\n        // - the input is *almost* a base64 content, with a extra chars at the\n        //   beginning or at the end\n        // - the input uses a base64 variant (base64url for example)\n        throw new Error(\"Invalid base64 input, bad content length.\");\n    }\n    var output;\n    if (support.uint8array) {\n        output = new Uint8Array(totalLength|0);\n    } else {\n        output = new Array(totalLength|0);\n    }\n\n    while (i < input.length) {\n\n        enc1 = _keyStr.indexOf(input.charAt(i++));\n        enc2 = _keyStr.indexOf(input.charAt(i++));\n        enc3 = _keyStr.indexOf(input.charAt(i++));\n        enc4 = _keyStr.indexOf(input.charAt(i++));\n\n        chr1 = (enc1 << 2) | (enc2 >> 4);\n        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n        chr3 = ((enc3 & 3) << 6) | enc4;\n\n        output[resultIndex++] = chr1;\n\n        if (enc3 !== 64) {\n            output[resultIndex++] = chr2;\n        }\n        if (enc4 !== 64) {\n            output[resultIndex++] = chr3;\n        }\n\n    }\n\n    return output;\n};\n","\"use strict\";\n\nmodule.exports = {\n    /**\n     * True if this is running in Nodejs, will be undefined in a browser.\n     * In a browser, browserify won't include this file and the whole module\n     * will be resolved an empty object.\n     */\n    isNode : typeof Buffer !== \"undefined\",\n    /**\n     * Create a new nodejs Buffer from an existing content.\n     * @param {Object} data the data to pass to the constructor.\n     * @param {String} encoding the encoding to use.\n     * @return {Buffer} a new Buffer.\n     */\n    newBufferFrom: function(data, encoding) {\n        if (Buffer.from && Buffer.from !== Uint8Array.from) {\n            return Buffer.from(data, encoding);\n        } else {\n            if (typeof data === \"number\") {\n                // Safeguard for old Node.js versions. On newer versions,\n                // Buffer.from(number) / Buffer(number, encoding) already throw.\n                throw new Error(\"The \\\"data\\\" argument must not be a number\");\n            }\n            return new Buffer(data, encoding);\n        }\n    },\n    /**\n     * Create a new nodejs Buffer with the specified size.\n     * @param {Integer} size the size of the buffer.\n     * @return {Buffer} a new Buffer.\n     */\n    allocBuffer: function (size) {\n        if (Buffer.alloc) {\n            return Buffer.alloc(size);\n        } else {\n            var buf = new Buffer(size);\n            buf.fill(0);\n            return buf;\n        }\n    },\n    /**\n     * Find out if an object is a Buffer.\n     * @param {Object} b the object to test.\n     * @return {Boolean} true if the object is a Buffer, false otherwise.\n     */\n    isBuffer : function(b){\n        return Buffer.isBuffer(b);\n    },\n\n    isStream : function (obj) {\n        return obj &&\n            typeof obj.on === \"function\" &&\n            typeof obj.pause === \"function\" &&\n            typeof obj.resume === \"function\";\n    }\n};\n","\"use strict\";\n\n// load the global object first:\n// - it should be better integrated in the system (unhandledRejection in node)\n// - the environment may have a custom Promise implementation (see zone.js)\nvar ES6Promise = null;\nif (typeof Promise !== \"undefined\") {\n    ES6Promise = Promise;\n} else {\n    ES6Promise = require(\"lie\");\n}\n\n/**\n * Let the user use/change some implementations.\n */\nmodule.exports = {\n    Promise: ES6Promise\n};\n","'use strict';\nvar immediate = require('immediate');\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n  this.state = PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n  if (resolver !== INTERNAL) {\n    safelyResolveThenable(this, resolver);\n  }\n}\n\nPromise.prototype[\"finally\"] = function (callback) {\n  if (typeof callback !== 'function') {\n    return this;\n  }\n  var p = this.constructor;\n  return this.then(resolve, reject);\n\n  function resolve(value) {\n    function yes () {\n      return value;\n    }\n    return p.resolve(callback()).then(yes);\n  }\n  function reject(reason) {\n    function no () {\n      throw reason;\n    }\n    return p.resolve(callback()).then(no);\n  }\n};\nPromise.prototype[\"catch\"] = function (onRejected) {\n  return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n    typeof onRejected !== 'function' && this.state === REJECTED) {\n    return this;\n  }\n  var promise = new this.constructor(INTERNAL);\n  if (this.state !== PENDING) {\n    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n\nhandlers.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n  if (result.status === 'error') {\n    return handlers.reject(self, result.value);\n  }\n  var thenable = result.value;\n\n  if (thenable) {\n    safelyResolveThenable(self, thenable);\n  } else {\n    self.state = FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n  return self;\n};\nhandlers.reject = function (self, error) {\n  self.state = REJECTED;\n  self.outcome = error;\n  var i = -1;\n  var len = self.queue.length;\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n  function onError(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n\n  var result = tryCatch(tryToUnwrap);\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\n\nfunction tryCatch(func, value) {\n  var out = {};\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n  return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n  if (value instanceof this) {\n    return value;\n  }\n  return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n  var promise = new this(INTERNAL);\n  return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n  return promise;\n  function allResolver(value, i) {\n    self.resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n      if (++resolved === len && !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n  return promise;\n  function resolver(value) {\n    self.resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}\n","'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\n{\n  if (Mutation) {\n    var called = 0;\n    var observer = new Mutation(nextTick);\n    var element = global.document.createTextNode('');\n    observer.observe(element, {\n      characterData: true\n    });\n    scheduleDrain = function () {\n      element.data = (called = ++called % 2);\n    };\n  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n    var channel = new global.MessageChannel();\n    channel.port1.onmessage = nextTick;\n    scheduleDrain = function () {\n      channel.port2.postMessage(0);\n    };\n  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n    scheduleDrain = function () {\n\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var scriptEl = global.document.createElement('script');\n      scriptEl.onreadystatechange = function () {\n        nextTick();\n\n        scriptEl.onreadystatechange = null;\n        scriptEl.parentNode.removeChild(scriptEl);\n        scriptEl = null;\n      };\n      global.document.documentElement.appendChild(scriptEl);\n    };\n  } else {\n    scheduleDrain = function () {\n      setTimeout(nextTick, 0);\n    };\n  }\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n  draining = true;\n  var i, oldQueue;\n  var len = queue.length;\n  while (len) {\n    oldQueue = queue;\n    queue = [];\n    i = -1;\n    while (++i < len) {\n      oldQueue[i]();\n    }\n    len = queue.length;\n  }\n  draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n  if (queue.push(task) === 1 && !draining) {\n    scheduleDrain();\n  }\n}\n","\"use strict\";\n\nvar support = require(\"./support\");\nvar base64 = require(\"./base64\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar external = require(\"./external\");\nrequire(\"setimmediate\");\n\n\n/**\n * Convert a string that pass as a \"binary string\": it should represent a byte\n * array but may have > 255 char codes. Be sure to take only the first byte\n * and returns the byte array.\n * @param {String} str the string to transform.\n * @return {Array|Uint8Array} the string in a binary format.\n */\nfunction string2binary(str) {\n    var result = null;\n    if (support.uint8array) {\n        result = new Uint8Array(str.length);\n    } else {\n        result = new Array(str.length);\n    }\n    return stringToArrayLike(str, result);\n}\n\n/**\n * Create a new blob with the given content and the given type.\n * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use\n * an Uint8Array because the stock browser of android 4 won't accept it (it\n * will be silently converted to a string, \"[object Uint8Array]\").\n *\n * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge:\n * when a large amount of Array is used to create the Blob, the amount of\n * memory consumed is nearly 100 times the original data amount.\n *\n * @param {String} type the mime type of the blob.\n * @return {Blob} the created blob.\n */\nexports.newBlob = function(part, type) {\n    exports.checkSupport(\"blob\");\n\n    try {\n        // Blob constructor\n        return new Blob([part], {\n            type: type\n        });\n    }\n    catch (e) {\n\n        try {\n            // deprecated, browser only, old way\n            var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n            var builder = new Builder();\n            builder.append(part);\n            return builder.getBlob(type);\n        }\n        catch (e) {\n\n            // well, fuck ?!\n            throw new Error(\"Bug : can't construct the Blob.\");\n        }\n    }\n\n\n};\n/**\n * The identity function.\n * @param {Object} input the input.\n * @return {Object} the same input.\n */\nfunction identity(input) {\n    return input;\n}\n\n/**\n * Fill in an array with a string.\n * @param {String} str the string to use.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.\n */\nfunction stringToArrayLike(str, array) {\n    for (var i = 0; i < str.length; ++i) {\n        array[i] = str.charCodeAt(i) & 0xFF;\n    }\n    return array;\n}\n\n/**\n * An helper for the function arrayLikeToString.\n * This contains static information and functions that\n * can be optimized by the browser JIT compiler.\n */\nvar arrayToStringHelper = {\n    /**\n     * Transform an array of int into a string, chunk by chunk.\n     * See the performances notes on arrayLikeToString.\n     * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n     * @param {String} type the type of the array.\n     * @param {Integer} chunk the chunk size.\n     * @return {String} the resulting string.\n     * @throws Error if the chunk is too big for the stack.\n     */\n    stringifyByChunk: function(array, type, chunk) {\n        var result = [], k = 0, len = array.length;\n        // shortcut\n        if (len <= chunk) {\n            return String.fromCharCode.apply(null, array);\n        }\n        while (k < len) {\n            if (type === \"array\" || type === \"nodebuffer\") {\n                result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));\n            }\n            else {\n                result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));\n            }\n            k += chunk;\n        }\n        return result.join(\"\");\n    },\n    /**\n     * Call String.fromCharCode on every item in the array.\n     * This is the naive implementation, which generate A LOT of intermediate string.\n     * This should be used when everything else fail.\n     * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n     * @return {String} the result.\n     */\n    stringifyByChar: function(array){\n        var resultStr = \"\";\n        for(var i = 0; i < array.length; i++) {\n            resultStr += String.fromCharCode(array[i]);\n        }\n        return resultStr;\n    },\n    applyCanBeUsed : {\n        /**\n         * true if the browser accepts to use String.fromCharCode on Uint8Array\n         */\n        uint8array : (function () {\n            try {\n                return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1;\n            } catch (e) {\n                return false;\n            }\n        })(),\n        /**\n         * true if the browser accepts to use String.fromCharCode on nodejs Buffer.\n         */\n        nodebuffer : (function () {\n            try {\n                return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1;\n            } catch (e) {\n                return false;\n            }\n        })()\n    }\n};\n\n/**\n * Transform an array-like object to a string.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\nfunction arrayLikeToString(array) {\n    // Performances notes :\n    // --------------------\n    // String.fromCharCode.apply(null, array) is the fastest, see\n    // see http://jsperf.com/converting-a-uint8array-to-a-string/2\n    // but the stack is limited (and we can get huge arrays !).\n    //\n    // result += String.fromCharCode(array[i]); generate too many strings !\n    //\n    // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2\n    // TODO : we now have workers that split the work. Do we still need that ?\n    var chunk = 65536,\n        type = exports.getTypeOf(array),\n        canUseApply = true;\n    if (type === \"uint8array\") {\n        canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array;\n    } else if (type === \"nodebuffer\") {\n        canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer;\n    }\n\n    if (canUseApply) {\n        while (chunk > 1) {\n            try {\n                return arrayToStringHelper.stringifyByChunk(array, type, chunk);\n            } catch (e) {\n                chunk = Math.floor(chunk / 2);\n            }\n        }\n    }\n\n    // no apply or chunk error : slow and painful algorithm\n    // default browser on android 4.*\n    return arrayToStringHelper.stringifyByChar(array);\n}\n\nexports.applyFromCharCode = arrayLikeToString;\n\n\n/**\n * Copy the data from an array-like to an other array-like.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.\n */\nfunction arrayLikeToArrayLike(arrayFrom, arrayTo) {\n    for (var i = 0; i < arrayFrom.length; i++) {\n        arrayTo[i] = arrayFrom[i];\n    }\n    return arrayTo;\n}\n\n// a matrix containing functions to transform everything into everything.\nvar transform = {};\n\n// string to ?\ntransform[\"string\"] = {\n    \"string\": identity,\n    \"array\": function(input) {\n        return stringToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return transform[\"string\"][\"uint8array\"](input).buffer;\n    },\n    \"uint8array\": function(input) {\n        return stringToArrayLike(input, new Uint8Array(input.length));\n    },\n    \"nodebuffer\": function(input) {\n        return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length));\n    }\n};\n\n// array to ?\ntransform[\"array\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": identity,\n    \"arraybuffer\": function(input) {\n        return (new Uint8Array(input)).buffer;\n    },\n    \"uint8array\": function(input) {\n        return new Uint8Array(input);\n    },\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(input);\n    }\n};\n\n// arraybuffer to ?\ntransform[\"arraybuffer\"] = {\n    \"string\": function(input) {\n        return arrayLikeToString(new Uint8Array(input));\n    },\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));\n    },\n    \"arraybuffer\": identity,\n    \"uint8array\": function(input) {\n        return new Uint8Array(input);\n    },\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(new Uint8Array(input));\n    }\n};\n\n// uint8array to ?\ntransform[\"uint8array\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return input.buffer;\n    },\n    \"uint8array\": identity,\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(input);\n    }\n};\n\n// nodebuffer to ?\ntransform[\"nodebuffer\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return transform[\"nodebuffer\"][\"uint8array\"](input).buffer;\n    },\n    \"uint8array\": function(input) {\n        return arrayLikeToArrayLike(input, new Uint8Array(input.length));\n    },\n    \"nodebuffer\": identity\n};\n\n/**\n * Transform an input into any type.\n * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.\n * If no output type is specified, the unmodified input will be returned.\n * @param {String} outputType the output type.\n * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.\n * @throws {Error} an Error if the browser doesn't support the requested output type.\n */\nexports.transformTo = function(outputType, input) {\n    if (!input) {\n        // undefined, null, etc\n        // an empty string won't harm.\n        input = \"\";\n    }\n    if (!outputType) {\n        return input;\n    }\n    exports.checkSupport(outputType);\n    var inputType = exports.getTypeOf(input);\n    var result = transform[inputType][outputType](input);\n    return result;\n};\n\n/**\n * Resolve all relative path components, \".\" and \"..\", in a path. If these relative components\n * traverse above the root then the resulting path will only contain the final path component.\n *\n * All empty components, e.g. \"//\", are removed.\n * @param {string} path A path with / or \\ separators\n * @returns {string} The path with all relative path components resolved.\n */\nexports.resolve = function(path) {\n    var parts = path.split(\"/\");\n    var result = [];\n    for (var index = 0; index < parts.length; index++) {\n        var part = parts[index];\n        // Allow the first and last component to be empty for trailing slashes.\n        if (part === \".\" || (part === \"\" && index !== 0 && index !== parts.length - 1)) {\n            continue;\n        } else if (part === \"..\") {\n            result.pop();\n        } else {\n            result.push(part);\n        }\n    }\n    return result.join(\"/\");\n};\n\n/**\n * Return the type of the input.\n * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.\n * @param {Object} input the input to identify.\n * @return {String} the (lowercase) type of the input.\n */\nexports.getTypeOf = function(input) {\n    if (typeof input === \"string\") {\n        return \"string\";\n    }\n    if (Object.prototype.toString.call(input) === \"[object Array]\") {\n        return \"array\";\n    }\n    if (support.nodebuffer && nodejsUtils.isBuffer(input)) {\n        return \"nodebuffer\";\n    }\n    if (support.uint8array && input instanceof Uint8Array) {\n        return \"uint8array\";\n    }\n    if (support.arraybuffer && input instanceof ArrayBuffer) {\n        return \"arraybuffer\";\n    }\n};\n\n/**\n * Throw an exception if the type is not supported.\n * @param {String} type the type to check.\n * @throws {Error} an Error if the browser doesn't support the requested type.\n */\nexports.checkSupport = function(type) {\n    var supported = support[type.toLowerCase()];\n    if (!supported) {\n        throw new Error(type + \" is not supported by this platform\");\n    }\n};\n\nexports.MAX_VALUE_16BITS = 65535;\nexports.MAX_VALUE_32BITS = -1; // well, \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\" is parsed as -1\n\n/**\n * Prettify a string read as binary.\n * @param {string} str the string to prettify.\n * @return {string} a pretty string.\n */\nexports.pretty = function(str) {\n    var res = \"\",\n        code, i;\n    for (i = 0; i < (str || \"\").length; i++) {\n        code = str.charCodeAt(i);\n        res += \"\\\\x\" + (code < 16 ? \"0\" : \"\") + code.toString(16).toUpperCase();\n    }\n    return res;\n};\n\n/**\n * Defer the call of a function.\n * @param {Function} callback the function to call asynchronously.\n * @param {Array} args the arguments to give to the callback.\n */\nexports.delay = function(callback, args, self) {\n    setImmediate(function () {\n        callback.apply(self || null, args || []);\n    });\n};\n\n/**\n * Extends a prototype with an other, without calling a constructor with\n * side effects. Inspired by nodejs' `utils.inherits`\n * @param {Function} ctor the constructor to augment\n * @param {Function} superCtor the parent constructor to use\n */\nexports.inherits = function (ctor, superCtor) {\n    var Obj = function() {};\n    Obj.prototype = superCtor.prototype;\n    ctor.prototype = new Obj();\n};\n\n/**\n * Merge the objects passed as parameters into a new one.\n * @private\n * @param {...Object} var_args All objects to merge.\n * @return {Object} a new object with the data of the others.\n */\nexports.extend = function() {\n    var result = {}, i, attr;\n    for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers\n        for (attr in arguments[i]) {\n            if (Object.prototype.hasOwnProperty.call(arguments[i], attr) && typeof result[attr] === \"undefined\") {\n                result[attr] = arguments[i][attr];\n            }\n        }\n    }\n    return result;\n};\n\n/**\n * Transform arbitrary content into a Promise.\n * @param {String} name a name for the content being processed.\n * @param {Object} inputData the content to process.\n * @param {Boolean} isBinary true if the content is not an unicode string\n * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character.\n * @param {Boolean} isBase64 true if the string content is encoded with base64.\n * @return {Promise} a promise in a format usable by JSZip.\n */\nexports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) {\n\n    // if inputData is already a promise, this flatten it.\n    var promise = external.Promise.resolve(inputData).then(function(data) {\n\n\n        var isBlob = support.blob && (data instanceof Blob || [\"[object File]\", \"[object Blob]\"].indexOf(Object.prototype.toString.call(data)) !== -1);\n\n        if (isBlob && typeof FileReader !== \"undefined\") {\n            return new external.Promise(function (resolve, reject) {\n                var reader = new FileReader();\n\n                reader.onload = function(e) {\n                    resolve(e.target.result);\n                };\n                reader.onerror = function(e) {\n                    reject(e.target.error);\n                };\n                reader.readAsArrayBuffer(data);\n            });\n        } else {\n            return data;\n        }\n    });\n\n    return promise.then(function(data) {\n        var dataType = exports.getTypeOf(data);\n\n        if (!dataType) {\n            return external.Promise.reject(\n                new Error(\"Can't read the data of '\" + name + \"'. Is it \" +\n                          \"in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\")\n            );\n        }\n        // special case : it's way easier to work with Uint8Array than with ArrayBuffer\n        if (dataType === \"arraybuffer\") {\n            data = exports.transformTo(\"uint8array\", data);\n        } else if (dataType === \"string\") {\n            if (isBase64) {\n                data = base64.decode(data);\n            }\n            else if (isBinary) {\n                // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask\n                if (isOptimizedBinaryString !== true) {\n                    // this is a string, not in a base64 format.\n                    // Be sure that this is a correct \"binary string\"\n                    data = string2binary(data);\n                }\n            }\n        }\n        return data;\n    });\n};\n","import JSZip from \"jszip\";\nimport * as musicMetadata from \"music-metadata\";\nimport { IMetadataApi, Options } from \"./types\";\nimport WebampLazy, { PrivateOptions } from \"./webampLazy\";\n\n// There is some bug between how JSZip pulls in setimmediate (which it expects\n// to polyfill `window.setimmediate` and our bundler set. The result is that one\n// of our bundles is missing the polyfill. If we call JSZip code from within\n// that bundle the polyfill is not present and we get an error.\n//\n// To work around this we manually import the helper function which is the one\n// place JSZip actually uses `setImmediate` and then set it to use our fork of\n// the polyfill which does not require adding a property to `window`.\nimport { setImmediate } from \"./setImmediate\";\n// @ts-ignore\nimport Utils from \"jszip/lib/utils\";\n// @ts-ignore\nUtils.delay = function (callback, args, self) {\n  setImmediate(() => {\n    callback.apply(self || null, args || []);\n  });\n};\n\nexport type * from \"./types\";\n\nexport default class Webamp extends WebampLazy {\n  constructor(options: Options & PrivateOptions) {\n    super({\n      ...options,\n      requireJSZip: async () => JSZip,\n      requireMusicMetadata: async (): Promise<IMetadataApi> => {\n        // @ts-ignore\n        return musicMetadata;\n      },\n    });\n  }\n}\n\n// Bit of a hack here. This overwrites the value set in WebampLazy.ts\n// @ts-ignore\nwindow.Webamp = Webamp;\n","import initDebug from 'debug';\nimport * as Token from 'token-types';\nimport * as util from '../common/Util.js';\nimport { AttachedPictureType, SyncTextHeader, TextEncodingToken, TextHeader } from './ID3v2Token.js';\nimport { Genres } from '../id3v1/ID3v1Parser.js';\nimport { makeUnexpectedFileContentError } from '../ParseError.js';\nconst debug = initDebug('music-metadata:id3v2:frame-parser');\nconst defaultEnc = 'latin1'; // latin1 == iso-8859-1;\nexport function parseGenre(origVal) {\n    // match everything inside parentheses\n    const genres = [];\n    let code;\n    let word = '';\n    for (const c of origVal) {\n        if (typeof code === 'string') {\n            if (c === '(' && code === '') {\n                word += '(';\n                code = undefined;\n            }\n            else if (c === ')') {\n                if (word !== '') {\n                    genres.push(word);\n                    word = '';\n                }\n                const genre = parseGenreCode(code);\n                if (genre) {\n                    genres.push(genre);\n                }\n                code = undefined;\n            }\n            else\n                code += c;\n        }\n        else if (c === '(') {\n            code = '';\n        }\n        else {\n            word += c;\n        }\n    }\n    if (word) {\n        if (genres.length === 0 && word.match(/^\\d*$/)) {\n            word = parseGenreCode(word);\n        }\n        if (word) {\n            genres.push(word);\n        }\n    }\n    return genres;\n}\nfunction parseGenreCode(code) {\n    if (code === 'RX')\n        return 'Remix';\n    if (code === 'CR')\n        return 'Cover';\n    if (code.match(/^\\d*$/)) {\n        return Genres[Number.parseInt(code)];\n    }\n}\nexport class FrameParser {\n    /**\n     * Create id3v2 frame parser\n     * @param major - Major version, e.g. (4) for  id3v2.4\n     * @param warningCollector - Used to collect decode issue\n     */\n    constructor(major, warningCollector) {\n        this.major = major;\n        this.warningCollector = warningCollector;\n    }\n    readData(uint8Array, type, includeCovers) {\n        if (uint8Array.length === 0) {\n            this.warningCollector.addWarning(`id3v2.${this.major} header has empty tag type=${type}`);\n            return;\n        }\n        const { encoding, bom } = TextEncodingToken.get(uint8Array, 0);\n        const length = uint8Array.length;\n        let offset = 0;\n        let output = []; // ToDo\n        const nullTerminatorLength = FrameParser.getNullTerminatorLength(encoding);\n        let fzero;\n        debug(`Parsing tag type=${type}, encoding=${encoding}, bom=${bom}`);\n        switch (type !== 'TXXX' && type[0] === 'T' ? 'T*' : type) {\n            case 'T*': // 4.2.1. Text information frames - details\n            case 'GRP1': // iTunes-specific ID3v2 grouping field\n            case 'IPLS': // v2.3: Involved people list\n            case 'MVIN':\n            case 'MVNM':\n            case 'PCS':\n            case 'PCST': {\n                let text;\n                try {\n                    text = util.decodeString(uint8Array.slice(1), encoding).replace(/\\x00+$/, '');\n                }\n                catch (error) {\n                    if (error instanceof Error) {\n                        this.warningCollector.addWarning(`id3v2.${this.major} type=${type} header has invalid string value: ${error.message}`);\n                        break;\n                    }\n                    throw error;\n                }\n                switch (type) {\n                    case 'TMCL': // Musician credits list\n                    case 'TIPL': // Involved people list\n                    case 'IPLS': // Involved people list\n                        output = FrameParser.functionList(this.splitValue(type, text));\n                        break;\n                    case 'TRK':\n                    case 'TRCK':\n                    case 'TPOS':\n                        output = text;\n                        break;\n                    case 'TCOM':\n                    case 'TEXT':\n                    case 'TOLY':\n                    case 'TOPE':\n                    case 'TPE1':\n                    case 'TSRC':\n                        // id3v2.3 defines that TCOM, TEXT, TOLY, TOPE & TPE1 values are separated by /\n                        output = this.splitValue(type, text);\n                        break;\n                    case 'TCO':\n                    case 'TCON':\n                        output = this.splitValue(type, text).map(v => parseGenre(v)).reduce((acc, val) => acc.concat(val), []);\n                        break;\n                    case 'PCS':\n                    case 'PCST':\n                        // TODO: Why `default` not results `1` but `''`?\n                        output = this.major >= 4 ? this.splitValue(type, text) : [text];\n                        output = (Array.isArray(output) && output[0] === '') ? 1 : 0;\n                        break;\n                    default:\n                        output = this.major >= 4 ? this.splitValue(type, text) : [text];\n                }\n                break;\n            }\n            case 'TXXX': {\n                const idAndData = FrameParser.readIdentifierAndData(uint8Array, offset + 1, length, encoding);\n                const textTag = {\n                    description: idAndData.id,\n                    text: this.splitValue(type, util.decodeString(idAndData.data, encoding).replace(/\\x00+$/, ''))\n                };\n                output = textTag;\n                break;\n            }\n            case 'PIC':\n            case 'APIC':\n                if (includeCovers) {\n                    const pic = {};\n                    offset += 1;\n                    switch (this.major) {\n                        case 2:\n                            pic.format = util.decodeString(uint8Array.slice(offset, offset + 3), 'latin1'); // 'latin1'; // latin1 == iso-8859-1;\n                            offset += 3;\n                            break;\n                        case 3:\n                        case 4:\n                            fzero = util.findZero(uint8Array, offset, length, defaultEnc);\n                            pic.format = util.decodeString(uint8Array.slice(offset, fzero), defaultEnc);\n                            offset = fzero + 1;\n                            break;\n                        default:\n                            throw makeUnexpectedMajorVersionError(this.major);\n                    }\n                    pic.format = FrameParser.fixPictureMimeType(pic.format);\n                    pic.type = AttachedPictureType[uint8Array[offset]];\n                    offset += 1;\n                    fzero = util.findZero(uint8Array, offset, length, encoding);\n                    pic.description = util.decodeString(uint8Array.slice(offset, fzero), encoding);\n                    offset = fzero + nullTerminatorLength;\n                    pic.data = uint8Array.slice(offset, length);\n                    output = pic;\n                }\n                break;\n            case 'CNT':\n            case 'PCNT':\n                output = Token.UINT32_BE.get(uint8Array, 0);\n                break;\n            case 'SYLT': {\n                const syltHeader = SyncTextHeader.get(uint8Array, 0);\n                offset += SyncTextHeader.len;\n                const result = {\n                    descriptor: '',\n                    language: syltHeader.language,\n                    contentType: syltHeader.contentType,\n                    timeStampFormat: syltHeader.timeStampFormat,\n                    syncText: []\n                };\n                let readSyllables = false;\n                while (offset < length) {\n                    const nullStr = FrameParser.readNullTerminatedString(uint8Array.subarray(offset), syltHeader.encoding);\n                    offset += nullStr.len;\n                    if (readSyllables) {\n                        const timestamp = Token.UINT32_BE.get(uint8Array, offset);\n                        offset += Token.UINT32_BE.len;\n                        result.syncText.push({\n                            text: nullStr.text,\n                            timestamp\n                        });\n                    }\n                    else {\n                        result.descriptor = nullStr.text;\n                        readSyllables = true;\n                    }\n                }\n                output = result;\n                break;\n            }\n            case 'ULT':\n            case 'USLT':\n            case 'COM':\n            case 'COMM': {\n                const textHeader = TextHeader.get(uint8Array, offset);\n                offset += TextHeader.len;\n                const descriptorStr = FrameParser.readNullTerminatedString(uint8Array.subarray(offset), textHeader.encoding);\n                offset += descriptorStr.len;\n                const textStr = FrameParser.readNullTerminatedString(uint8Array.subarray(offset), textHeader.encoding);\n                const comment = {\n                    language: textHeader.language,\n                    descriptor: descriptorStr.text,\n                    text: textStr.text\n                };\n                output = comment;\n                break;\n            }\n            case 'UFID': {\n                const ufid = FrameParser.readIdentifierAndData(uint8Array, offset, length, defaultEnc);\n                output = { owner_identifier: ufid.id, identifier: ufid.data };\n                break;\n            }\n            case 'PRIV': { // private frame\n                const priv = FrameParser.readIdentifierAndData(uint8Array, offset, length, defaultEnc);\n                output = { owner_identifier: priv.id, data: priv.data };\n                break;\n            }\n            case 'POPM': { // Popularimeter\n                fzero = util.findZero(uint8Array, offset, length, defaultEnc);\n                const email = util.decodeString(uint8Array.slice(offset, fzero), defaultEnc);\n                offset = fzero + 1;\n                const dataLen = length - offset;\n                output = {\n                    email,\n                    rating: Token.UINT8.get(uint8Array, offset),\n                    counter: dataLen >= 5 ? Token.UINT32_BE.get(uint8Array, offset + 1) : undefined\n                };\n                break;\n            }\n            case 'GEOB': { // General encapsulated object\n                fzero = util.findZero(uint8Array, offset + 1, length, encoding);\n                const mimeType = util.decodeString(uint8Array.slice(offset + 1, fzero), defaultEnc);\n                offset = fzero + 1;\n                fzero = util.findZero(uint8Array, offset, length, encoding);\n                const filename = util.decodeString(uint8Array.slice(offset, fzero), defaultEnc);\n                offset = fzero + 1;\n                fzero = util.findZero(uint8Array, offset, length, encoding);\n                const description = util.decodeString(uint8Array.slice(offset, fzero), defaultEnc);\n                offset = fzero + 1;\n                const geob = {\n                    type: mimeType,\n                    filename,\n                    description,\n                    data: uint8Array.slice(offset, length)\n                };\n                output = geob;\n                break;\n            }\n            // W-Frames:\n            case 'WCOM':\n            case 'WCOP':\n            case 'WOAF':\n            case 'WOAR':\n            case 'WOAS':\n            case 'WORS':\n            case 'WPAY':\n            case 'WPUB':\n                // Decode URL\n                fzero = util.findZero(uint8Array, offset + 1, length, encoding);\n                output = util.decodeString(uint8Array.slice(offset, fzero), defaultEnc);\n                break;\n            case 'WXXX': {\n                // Decode URL\n                fzero = util.findZero(uint8Array, offset + 1, length, encoding);\n                const description = util.decodeString(uint8Array.slice(offset + 1, fzero), encoding);\n                offset = fzero + (encoding === 'utf-16le' ? 2 : 1);\n                output = { description, url: util.decodeString(uint8Array.slice(offset, length), defaultEnc) };\n                break;\n            }\n            case 'WFD':\n            case 'WFED':\n                output = util.decodeString(uint8Array.slice(offset + 1, util.findZero(uint8Array, offset + 1, length, encoding)), encoding);\n                break;\n            case 'MCDI': {\n                // Music CD identifier\n                output = uint8Array.slice(0, length);\n                break;\n            }\n            default:\n                debug(`Warning: unsupported id3v2-tag-type: ${type}`);\n                break;\n        }\n        return output;\n    }\n    static readNullTerminatedString(uint8Array, encoding) {\n        let offset = encoding.bom ? 2 : 0;\n        const zeroIndex = util.findZero(uint8Array, offset, uint8Array.length, encoding.encoding);\n        const txt = uint8Array.slice(offset, zeroIndex);\n        if (encoding.encoding === 'utf-16le') {\n            offset = zeroIndex + 2;\n        }\n        else {\n            offset = zeroIndex + 1;\n        }\n        return {\n            text: util.decodeString(txt, encoding.encoding),\n            len: offset\n        };\n    }\n    static fixPictureMimeType(pictureType) {\n        pictureType = pictureType.toLocaleLowerCase();\n        switch (pictureType) {\n            case 'jpg':\n                return 'image/jpeg';\n            case 'png':\n                return 'image/png';\n        }\n        return pictureType;\n    }\n    /**\n     * Converts TMCL (Musician credits list) or TIPL (Involved people list)\n     * @param entries\n     */\n    static functionList(entries) {\n        const res = {};\n        for (let i = 0; i + 1 < entries.length; i += 2) {\n            const names = entries[i + 1].split(',');\n            res[entries[i]] = res[entries[i]] ? res[entries[i]].concat(names) : names;\n        }\n        return res;\n    }\n    /**\n     * id3v2.4 defines that multiple T* values are separated by 0x00\n     * id3v2.3 defines that TCOM, TEXT, TOLY, TOPE & TPE1 values are separated by /\n     * @param tag - Tag name\n     * @param text - Concatenated tag value\n     * @returns Split tag value\n     */\n    splitValue(tag, text) {\n        let values;\n        if (this.major < 4) {\n            values = text.split(/\\x00/g);\n            if (values.length > 1) {\n                this.warningCollector.addWarning(`ID3v2.${this.major} ${tag} uses non standard null-separator.`);\n            }\n            else {\n                values = text.split(/\\//g);\n            }\n        }\n        else {\n            values = text.split(/\\x00/g);\n        }\n        return FrameParser.trimArray(values);\n    }\n    static trimArray(values) {\n        return values.map(value => value.replace(/\\x00+$/, '').trim());\n    }\n    static readIdentifierAndData(uint8Array, offset, length, encoding) {\n        const fzero = util.findZero(uint8Array, offset, length, encoding);\n        const id = util.decodeString(uint8Array.slice(offset, fzero), encoding);\n        offset = fzero + FrameParser.getNullTerminatorLength(encoding);\n        return { id, data: uint8Array.slice(offset, length) };\n    }\n    static getNullTerminatorLength(enc) {\n        return enc === 'utf-16le' ? 2 : 1;\n    }\n}\nexport class Id3v2ContentError extends makeUnexpectedFileContentError('id3v2') {\n}\nfunction makeUnexpectedMajorVersionError(majorVer) {\n    throw new Id3v2ContentError(`Unexpected majorVer: ${majorVer}`);\n}\n//# sourceMappingURL=FrameParser.js.map","import * as Token from 'token-types';\nimport * as util from '../common/Util.js';\nimport { FrameParser, Id3v2ContentError } from './FrameParser.js';\nimport { ExtendedHeader, ID3v2Header, UINT32SYNCSAFE } from './ID3v2Token.js';\nconst asciiDecoder = new TextDecoder('ascii');\nexport class ID3v2Parser {\n    constructor() {\n        this.tokenizer = undefined;\n        this.id3Header = undefined;\n        this.metadata = undefined;\n        this.headerType = undefined;\n        this.options = undefined;\n    }\n    static removeUnsyncBytes(buffer) {\n        let readI = 0;\n        let writeI = 0;\n        while (readI < buffer.length - 1) {\n            if (readI !== writeI) {\n                buffer[writeI] = buffer[readI];\n            }\n            readI += (buffer[readI] === 0xFF && buffer[readI + 1] === 0) ? 2 : 1;\n            writeI++;\n        }\n        if (readI < buffer.length) {\n            buffer[writeI++] = buffer[readI];\n        }\n        return buffer.slice(0, writeI);\n    }\n    static getFrameHeaderLength(majorVer) {\n        switch (majorVer) {\n            case 2:\n                return 6;\n            case 3:\n            case 4:\n                return 10;\n            default:\n                throw makeUnexpectedMajorVersionError(majorVer);\n        }\n    }\n    static readFrameFlags(b) {\n        return {\n            status: {\n                tag_alter_preservation: util.getBit(b, 0, 6),\n                file_alter_preservation: util.getBit(b, 0, 5),\n                read_only: util.getBit(b, 0, 4)\n            },\n            format: {\n                grouping_identity: util.getBit(b, 1, 7),\n                compression: util.getBit(b, 1, 3),\n                encryption: util.getBit(b, 1, 2),\n                unsynchronisation: util.getBit(b, 1, 1),\n                data_length_indicator: util.getBit(b, 1, 0)\n            }\n        };\n    }\n    static readFrameData(uint8Array, frameHeader, majorVer, includeCovers, warningCollector) {\n        const frameParser = new FrameParser(majorVer, warningCollector);\n        switch (majorVer) {\n            case 2:\n                return frameParser.readData(uint8Array, frameHeader.id, includeCovers);\n            case 3:\n            case 4:\n                if (frameHeader.flags?.format.unsynchronisation) {\n                    uint8Array = ID3v2Parser.removeUnsyncBytes(uint8Array);\n                }\n                if (frameHeader.flags?.format.data_length_indicator) {\n                    uint8Array = uint8Array.slice(4, uint8Array.length);\n                }\n                return frameParser.readData(uint8Array, frameHeader.id, includeCovers);\n            default:\n                throw makeUnexpectedMajorVersionError(majorVer);\n        }\n    }\n    /**\n     * Create a combined tag key, of tag & description\n     * @param tag e.g.: COM\n     * @param description e.g. iTunPGAP\n     * @returns string e.g. COM:iTunPGAP\n     */\n    static makeDescriptionTagName(tag, description) {\n        return tag + (description ? `:${description}` : '');\n    }\n    async parse(metadata, tokenizer, options) {\n        this.tokenizer = tokenizer;\n        this.metadata = metadata;\n        this.options = options;\n        const id3Header = await this.tokenizer.readToken(ID3v2Header);\n        if (id3Header.fileIdentifier !== 'ID3') {\n            throw new Id3v2ContentError('expected ID3-header file-identifier \\'ID3\\' was not found');\n        }\n        this.id3Header = id3Header;\n        this.headerType = (`ID3v2.${id3Header.version.major}`);\n        return id3Header.flags.isExtendedHeader ? this.parseExtendedHeader() : this.parseId3Data(id3Header.size);\n    }\n    async parseExtendedHeader() {\n        const extendedHeader = await this.tokenizer.readToken(ExtendedHeader);\n        const dataRemaining = extendedHeader.size - ExtendedHeader.len;\n        return dataRemaining > 0 ? this.parseExtendedHeaderData(dataRemaining, extendedHeader.size) : this.parseId3Data(this.id3Header.size - extendedHeader.size);\n    }\n    async parseExtendedHeaderData(dataRemaining, extendedHeaderSize) {\n        await this.tokenizer.ignore(dataRemaining);\n        return this.parseId3Data(this.id3Header.size - extendedHeaderSize);\n    }\n    async parseId3Data(dataLen) {\n        const uint8Array = await this.tokenizer.readToken(new Token.Uint8ArrayType(dataLen));\n        for (const tag of this.parseMetadata(uint8Array)) {\n            switch (tag.id) {\n                case 'TXXX':\n                    if (tag.value) {\n                        await this.handleTag(tag, tag.value.text, () => tag.value.description);\n                    }\n                    break;\n                default:\n                    await (Array.isArray(tag.value) ? Promise.all(tag.value.map(value => this.addTag(tag.id, value))) : this.addTag(tag.id, tag.value));\n            }\n        }\n    }\n    async handleTag(tag, values, descriptor, resolveValue = value => value) {\n        await Promise.all(values.map(value => this.addTag(ID3v2Parser.makeDescriptionTagName(tag.id, descriptor(value)), resolveValue(value))));\n    }\n    async addTag(id, value) {\n        await this.metadata.addTag(this.headerType, id, value);\n    }\n    parseMetadata(data) {\n        let offset = 0;\n        const tags = [];\n        while (true) {\n            if (offset === data.length)\n                break;\n            const frameHeaderLength = ID3v2Parser.getFrameHeaderLength(this.id3Header.version.major);\n            if (offset + frameHeaderLength > data.length) {\n                this.metadata.addWarning('Illegal ID3v2 tag length');\n                break;\n            }\n            const frameHeaderBytes = data.slice(offset, offset + frameHeaderLength);\n            offset += frameHeaderLength;\n            const frameHeader = this.readFrameHeader(frameHeaderBytes, this.id3Header.version.major);\n            const frameDataBytes = data.slice(offset, offset + frameHeader.length);\n            offset += frameHeader.length;\n            const values = ID3v2Parser.readFrameData(frameDataBytes, frameHeader, this.id3Header.version.major, !this.options.skipCovers, this.metadata);\n            if (values) {\n                tags.push({ id: frameHeader.id, value: values });\n            }\n        }\n        return tags;\n    }\n    readFrameHeader(uint8Array, majorVer) {\n        let header;\n        switch (majorVer) {\n            case 2:\n                header = {\n                    id: asciiDecoder.decode(uint8Array.slice(0, 3)),\n                    length: Token.UINT24_BE.get(uint8Array, 3)\n                };\n                if (!header.id.match(/[A-Z0-9]{3}/g)) {\n                    this.metadata.addWarning(`Invalid ID3v2.${this.id3Header.version.major} frame-header-ID: ${header.id}`);\n                }\n                break;\n            case 3:\n            case 4:\n                header = {\n                    id: asciiDecoder.decode(uint8Array.slice(0, 4)),\n                    length: (majorVer === 4 ? UINT32SYNCSAFE : Token.UINT32_BE).get(uint8Array, 4),\n                    flags: ID3v2Parser.readFrameFlags(uint8Array.slice(8, 10))\n                };\n                if (!header.id.match(/[A-Z0-9]{4}/g)) {\n                    this.metadata.addWarning(`Invalid ID3v2.${this.id3Header.version.major} frame-header-ID: ${header.id}`);\n                }\n                break;\n            default:\n                throw makeUnexpectedMajorVersionError(majorVer);\n        }\n        return header;\n    }\n}\nfunction makeUnexpectedMajorVersionError(majorVer) {\n    throw new Id3v2ContentError(`Unexpected majorVer: ${majorVer}`);\n}\n//# sourceMappingURL=ID3v2Parser.js.map","import { EndOfStreamError } from 'strtok3';\nimport initDebug from 'debug';\nimport { ID3v2Header } from './ID3v2Token.js';\nimport { ID3v2Parser } from './ID3v2Parser.js';\nimport { ID3v1Parser } from '../id3v1/ID3v1Parser.js';\nimport { BasicParser } from '../common/BasicParser.js';\nconst debug = initDebug('music-metadata:parser:ID3');\n/**\n * Abstract parser which tries take ID3v2 and ID3v1 headers.\n */\nexport class AbstractID3Parser extends BasicParser {\n    constructor() {\n        super(...arguments);\n        this.id3parser = new ID3v2Parser();\n    }\n    static async startsWithID3v2Header(tokenizer) {\n        return (await tokenizer.peekToken(ID3v2Header)).fileIdentifier === 'ID3';\n    }\n    async parse() {\n        try {\n            await this.parseID3v2();\n        }\n        catch (err) {\n            if (err instanceof EndOfStreamError) {\n                debug(\"End-of-stream\");\n            }\n            else {\n                throw err;\n            }\n        }\n    }\n    finalize() {\n        return;\n    }\n    async parseID3v2() {\n        await this.tryReadId3v2Headers();\n        debug('End of ID3v2 header, go to MPEG-parser: pos=%s', this.tokenizer.position);\n        await this.postId3v2Parse();\n        if (this.options.skipPostHeaders && this.metadata.hasAny()) {\n            this.finalize();\n        }\n        else {\n            const id3v1parser = new ID3v1Parser(this.metadata, this.tokenizer, this.options);\n            await id3v1parser.parse();\n            this.finalize();\n        }\n    }\n    async tryReadId3v2Headers() {\n        const id3Header = await this.tokenizer.peekToken(ID3v2Header);\n        if (id3Header.fileIdentifier === 'ID3') {\n            debug('Found ID3v2 header, pos=%s', this.tokenizer.position);\n            await this.id3parser.parse(this.metadata, this.tokenizer, this.options);\n            return this.tryReadId3v2Headers();\n        }\n    }\n}\n//# sourceMappingURL=AbstractID3Parser.js.map","import * as common from '../common/Util.js';\n/**\n * https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format#name-code\n */\nconst NameCode = {\n    /**\n     * not set\n     */\n    not_set: 0,\n    /**\n     * Radio Gain Adjustment\n     */\n    radio: 1,\n    /**\n     * Audiophile Gain Adjustment\n     */\n    audiophile: 2\n};\n/**\n * https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format#originator-code\n */\nconst ReplayGainOriginator = {\n    /**\n     * Replay Gain unspecified\n     */\n    unspecified: 0,\n    /**\n     * Replay Gain pre-set by artist/producer/mastering engineer\n     */\n    engineer: 1,\n    /**\n     * Replay Gain set by user\n     */\n    user: 2,\n    /**\n     * Replay Gain determined automatically, as described on this site\n     */\n    automatic: 3,\n    /**\n     * Set by simple RMS average\n     */\n    rms_average: 4\n};\n/**\n * Replay Gain Data Format\n *\n * https://github.com/Borewit/music-metadata/wiki/Replay-Gain-Data-Format\n */\nexport const ReplayGain = {\n    len: 2,\n    get: (buf, off) => {\n        const gain_type = common.getBitAllignedNumber(buf, off, 0, 3);\n        const sign = common.getBitAllignedNumber(buf, off, 6, 1);\n        const gain_adj = common.getBitAllignedNumber(buf, off, 7, 9) / 10.0;\n        if (gain_type > 0) {\n            return {\n                type: common.getBitAllignedNumber(buf, off, 0, 3),\n                origin: common.getBitAllignedNumber(buf, off, 3, 3),\n                adjustment: (sign ? -gain_adj : gain_adj)\n            };\n        }\n        return undefined;\n    }\n};\n//# sourceMappingURL=ReplayGainDataFormat.js.map","/**\n * Extended Lame Header\n */\nimport * as Token from 'token-types';\nimport * as common from '../common/Util.js';\nimport { ReplayGain } from './ReplayGainDataFormat.js';\n/**\n * Info Tag\n * @link http://gabriel.mp3-tech.org/mp3infotag.html\n * @link https://github.com/quodlibet/mutagen/blob/abd58ee58772224334a18817c3fb31103572f70e/mutagen/mp3/_util.py#L112\n */\nexport const ExtendedLameHeader = {\n    len: 27,\n    get: (buf, off) => {\n        const track_peak = Token.UINT32_BE.get(buf, off + 2);\n        return {\n            revision: common.getBitAllignedNumber(buf, off, 0, 4),\n            vbr_method: common.getBitAllignedNumber(buf, off, 4, 4),\n            lowpass_filter: 100 * Token.UINT8.get(buf, off + 1),\n            track_peak: track_peak === 0 ? null : track_peak / 2 ** 23,\n            track_gain: ReplayGain.get(buf, 6),\n            album_gain: ReplayGain.get(buf, 8),\n            music_length: Token.UINT32_BE.get(buf, off + 20),\n            music_crc: Token.UINT8.get(buf, off + 24),\n            header_crc: Token.UINT16_BE.get(buf, off + 24)\n        };\n    }\n};\n//# sourceMappingURL=ExtendedLameHeader.js.map","import * as Token from 'token-types';\nimport * as util from '../common/Util.js';\nimport { ExtendedLameHeader } from './ExtendedLameHeader.js';\n/**\n * Info Tag: Xing, LAME\n */\nexport const InfoTagHeaderTag = new Token.StringType(4, 'ascii');\n/**\n * LAME TAG value\n * Did not find any official documentation for this\n * Value e.g.: \"3.98.4\"\n */\nexport const LameEncoderVersion = new Token.StringType(6, 'ascii');\n/**\n * Info Tag\n * Ref: http://gabriel.mp3-tech.org/mp3infotag.html\n */\nexport const XingHeaderFlags = {\n    len: 4,\n    get: (buf, off) => {\n        return {\n            frames: util.isBitSet(buf, off, 31),\n            bytes: util.isBitSet(buf, off, 30),\n            toc: util.isBitSet(buf, off, 29),\n            vbrScale: util.isBitSet(buf, off, 28)\n        };\n    }\n};\n// /**\n//  * XING Header Tag\n//  * Ref: http://gabriel.mp3-tech.org/mp3infotag.html\n//  */\nexport async function readXingHeader(tokenizer) {\n    const flags = await tokenizer.readToken(XingHeaderFlags);\n    const xingInfoTag = { numFrames: null, streamSize: null, vbrScale: null };\n    if (flags.frames) {\n        xingInfoTag.numFrames = await tokenizer.readToken(Token.UINT32_BE);\n    }\n    if (flags.bytes) {\n        xingInfoTag.streamSize = await tokenizer.readToken(Token.UINT32_BE);\n    }\n    if (flags.toc) {\n        xingInfoTag.toc = new Uint8Array(100);\n        await tokenizer.readBuffer(xingInfoTag.toc);\n    }\n    if (flags.vbrScale) {\n        xingInfoTag.vbrScale = await tokenizer.readToken(Token.UINT32_BE);\n    }\n    const lameTag = await tokenizer.peekToken(new Token.StringType(4, 'ascii'));\n    if (lameTag === 'LAME') {\n        await tokenizer.ignore(4);\n        xingInfoTag.lame = {\n            version: await tokenizer.readToken(new Token.StringType(5, 'ascii'))\n        };\n        const match = xingInfoTag.lame.version.match(/\\d+.\\d+/g);\n        if (match !== null) {\n            const majorMinorVersion = match[0]; // e.g. 3.97\n            const version = majorMinorVersion.split('.').map(n => Number.parseInt(n, 10));\n            if (version[0] >= 3 && version[1] >= 90) {\n                xingInfoTag.lame.extended = await tokenizer.readToken(ExtendedLameHeader);\n            }\n        }\n    }\n    return xingInfoTag;\n}\n//# sourceMappingURL=XingTag.js.map","import * as Token from 'token-types';\nimport { EndOfStreamError } from 'strtok3';\nimport initDebug from 'debug';\nimport * as common from '../common/Util.js';\nimport { AbstractID3Parser } from '../id3v2/AbstractID3Parser.js';\nimport { InfoTagHeaderTag, LameEncoderVersion, readXingHeader } from './XingTag.js';\nimport { makeUnexpectedFileContentError } from '../ParseError.js';\nconst debug = initDebug('music-metadata:parser:mpeg');\nexport class MpegContentError extends makeUnexpectedFileContentError('MPEG') {\n}\n/**\n * Cache buffer size used for searching synchronization preabmle\n */\nconst maxPeekLen = 1024;\n/**\n * MPEG-4 Audio definitions\n * Ref:  https://wiki.multimedia.cx/index.php/MPEG-4_Audio\n */\nconst MPEG4 = {\n    /**\n     * Audio Object Types\n     */\n    AudioObjectTypes: [\n        'AAC Main',\n        'AAC LC', // Low Complexity\n        'AAC SSR', // Scalable Sample Rate\n        'AAC LTP' // Long Term Prediction\n    ],\n    /**\n     * Sampling Frequencies\n     * https://wiki.multimedia.cx/index.php/MPEG-4_Audio#Sampling_Frequencies\n     */\n    SamplingFrequencies: [\n        96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350, null, null, -1\n    ]\n    /**\n     * Channel Configurations\n     */\n};\nconst MPEG4_ChannelConfigurations = [\n    undefined,\n    ['front-center'],\n    ['front-left', 'front-right'],\n    ['front-center', 'front-left', 'front-right'],\n    ['front-center', 'front-left', 'front-right', 'back-center'],\n    ['front-center', 'front-left', 'front-right', 'back-left', 'back-right'],\n    ['front-center', 'front-left', 'front-right', 'back-left', 'back-right', 'LFE-channel'],\n    ['front-center', 'front-left', 'front-right', 'side-left', 'side-right', 'back-left', 'back-right', 'LFE-channel']\n];\n/**\n * MPEG Audio Layer I/II/III frame header\n * Ref: https://www.mp3-tech.org/programmer/frame_header.html\n * Bit layout: AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM\n * Ref: https://wiki.multimedia.cx/index.php/ADTS\n */\nclass MpegFrameHeader {\n    constructor(buf, off) {\n        // E(15,12): Bitrate index\n        this.bitrateIndex = null;\n        // F(11,10): Sampling rate frequency index\n        this.sampRateFreqIndex = null;\n        // G(9): Padding bit\n        this.padding = null;\n        // H(8): Private bit\n        this.privateBit = null;\n        // I(7,6): Channel Mode\n        this.channelModeIndex = null;\n        // J(5,4): Mode extension (Only used in Joint stereo)\n        this.modeExtension = null;\n        // L(2): Original\n        this.isOriginalMedia = null;\n        this.version = null;\n        this.bitrate = null;\n        this.samplingRate = null;\n        this.frameLength = 0;\n        // B(20,19): MPEG Audio versionIndex ID\n        this.versionIndex = common.getBitAllignedNumber(buf, off + 1, 3, 2);\n        // C(18,17): Layer description\n        this.layer = MpegFrameHeader.LayerDescription[common.getBitAllignedNumber(buf, off + 1, 5, 2)];\n        if (this.versionIndex > 1 && this.layer === 0) {\n            this.parseAdtsHeader(buf, off); // Audio Data Transport Stream (ADTS)\n        }\n        else {\n            this.parseMpegHeader(buf, off); // Conventional MPEG header\n        }\n        // D(16): Protection bit (if true 16-bit CRC follows header)\n        this.isProtectedByCRC = !common.isBitSet(buf, off + 1, 7);\n    }\n    calcDuration(numFrames) {\n        return this.samplingRate == null ? null : (numFrames * this.calcSamplesPerFrame() / this.samplingRate);\n    }\n    calcSamplesPerFrame() {\n        return MpegFrameHeader.samplesInFrameTable[this.version === 1 ? 0 : 1][this.layer];\n    }\n    calculateSideInfoLength() {\n        if (this.layer !== 3)\n            return 2;\n        if (this.channelModeIndex === 3) {\n            // mono\n            if (this.version === 1) {\n                return 17;\n            }\n            if (this.version === 2 || this.version === 2.5) {\n                return 9;\n            }\n        }\n        else {\n            if (this.version === 1) {\n                return 32;\n            }\n            if (this.version === 2 || this.version === 2.5) {\n                return 17;\n            }\n        }\n        return null;\n    }\n    calcSlotSize() {\n        return [null, 4, 1, 1][this.layer];\n    }\n    parseMpegHeader(buf, off) {\n        this.container = 'MPEG';\n        // E(15,12): Bitrate index\n        this.bitrateIndex = common.getBitAllignedNumber(buf, off + 2, 0, 4);\n        // F(11,10): Sampling rate frequency index\n        this.sampRateFreqIndex = common.getBitAllignedNumber(buf, off + 2, 4, 2);\n        // G(9): Padding bit\n        this.padding = common.isBitSet(buf, off + 2, 6);\n        // H(8): Private bit\n        this.privateBit = common.isBitSet(buf, off + 2, 7);\n        // I(7,6): Channel Mode\n        this.channelModeIndex = common.getBitAllignedNumber(buf, off + 3, 0, 2);\n        // J(5,4): Mode extension (Only used in Joint stereo)\n        this.modeExtension = common.getBitAllignedNumber(buf, off + 3, 2, 2);\n        // K(3): Copyright\n        this.isCopyrighted = common.isBitSet(buf, off + 3, 4);\n        // L(2): Original\n        this.isOriginalMedia = common.isBitSet(buf, off + 3, 5);\n        // M(3): The original bit indicates, if it is set, that the frame is located on its original media.\n        this.emphasis = common.getBitAllignedNumber(buf, off + 3, 7, 2);\n        this.version = MpegFrameHeader.VersionID[this.versionIndex];\n        this.channelMode = MpegFrameHeader.ChannelMode[this.channelModeIndex];\n        this.codec = `MPEG ${this.version} Layer ${this.layer}`;\n        // Calculate bitrate\n        const bitrateInKbps = this.calcBitrate();\n        if (!bitrateInKbps) {\n            throw new MpegContentError('Cannot determine bit-rate');\n        }\n        this.bitrate = bitrateInKbps * 1000;\n        // Calculate sampling rate\n        this.samplingRate = this.calcSamplingRate();\n        if (this.samplingRate == null) {\n            throw new MpegContentError('Cannot determine sampling-rate');\n        }\n    }\n    parseAdtsHeader(buf, off) {\n        debug(\"layer=0 => ADTS\");\n        this.version = this.versionIndex === 2 ? 4 : 2;\n        this.container = `ADTS/MPEG-${this.version}`;\n        const profileIndex = common.getBitAllignedNumber(buf, off + 2, 0, 2);\n        this.codec = 'AAC';\n        this.codecProfile = MPEG4.AudioObjectTypes[profileIndex];\n        debug(`MPEG-4 audio-codec=${this.codec}`);\n        const samplingFrequencyIndex = common.getBitAllignedNumber(buf, off + 2, 2, 4);\n        this.samplingRate = MPEG4.SamplingFrequencies[samplingFrequencyIndex];\n        debug(`sampling-rate=${this.samplingRate}`);\n        const channelIndex = common.getBitAllignedNumber(buf, off + 2, 7, 3);\n        this.mp4ChannelConfig = MPEG4_ChannelConfigurations[channelIndex];\n        debug(`channel-config=${this.mp4ChannelConfig ? this.mp4ChannelConfig.join('+') : '?'}`);\n        this.frameLength = common.getBitAllignedNumber(buf, off + 3, 6, 2) << 11;\n    }\n    calcBitrate() {\n        if (this.bitrateIndex === 0x00 || // free\n            this.bitrateIndex === 0x0F) { // reserved\n            return null;\n        }\n        if (this.version && this.bitrateIndex) {\n            const codecIndex = 10 * Math.floor(this.version) + this.layer;\n            return MpegFrameHeader.bitrate_index[this.bitrateIndex][codecIndex];\n        }\n        return null;\n    }\n    calcSamplingRate() {\n        if (this.sampRateFreqIndex === 0x03 || this.version === null || this.sampRateFreqIndex == null)\n            return null; // 'reserved'\n        return MpegFrameHeader.sampling_rate_freq_index[this.version][this.sampRateFreqIndex];\n    }\n}\nMpegFrameHeader.SyncByte1 = 0xFF;\nMpegFrameHeader.SyncByte2 = 0xE0;\nMpegFrameHeader.VersionID = [2.5, null, 2, 1];\nMpegFrameHeader.LayerDescription = [0, 3, 2, 1];\nMpegFrameHeader.ChannelMode = ['stereo', 'joint_stereo', 'dual_channel', 'mono'];\nMpegFrameHeader.bitrate_index = {\n    1: { 11: 32, 12: 32, 13: 32, 21: 32, 22: 8, 23: 8 },\n    2: { 11: 64, 12: 48, 13: 40, 21: 48, 22: 16, 23: 16 },\n    3: { 11: 96, 12: 56, 13: 48, 21: 56, 22: 24, 23: 24 },\n    4: { 11: 128, 12: 64, 13: 56, 21: 64, 22: 32, 23: 32 },\n    5: { 11: 160, 12: 80, 13: 64, 21: 80, 22: 40, 23: 40 },\n    6: { 11: 192, 12: 96, 13: 80, 21: 96, 22: 48, 23: 48 },\n    7: { 11: 224, 12: 112, 13: 96, 21: 112, 22: 56, 23: 56 },\n    8: { 11: 256, 12: 128, 13: 112, 21: 128, 22: 64, 23: 64 },\n    9: { 11: 288, 12: 160, 13: 128, 21: 144, 22: 80, 23: 80 },\n    10: { 11: 320, 12: 192, 13: 160, 21: 160, 22: 96, 23: 96 },\n    11: { 11: 352, 12: 224, 13: 192, 21: 176, 22: 112, 23: 112 },\n    12: { 11: 384, 12: 256, 13: 224, 21: 192, 22: 128, 23: 128 },\n    13: { 11: 416, 12: 320, 13: 256, 21: 224, 22: 144, 23: 144 },\n    14: { 11: 448, 12: 384, 13: 320, 21: 256, 22: 160, 23: 160 }\n};\nMpegFrameHeader.sampling_rate_freq_index = {\n    1: { 0: 44100, 1: 48000, 2: 32000 },\n    2: { 0: 22050, 1: 24000, 2: 16000 },\n    2.5: { 0: 11025, 1: 12000, 2: 8000 }\n};\nMpegFrameHeader.samplesInFrameTable = [\n    /* Layer   I    II   III */\n    [0, 384, 1152, 1152], // MPEG-1\n    [0, 384, 1152, 576] // MPEG-2(.5\n];\n/**\n * MPEG Audio Layer I/II/III\n */\nconst FrameHeader = {\n    len: 4,\n    get: (buf, off) => {\n        return new MpegFrameHeader(buf, off);\n    }\n};\nfunction getVbrCodecProfile(vbrScale) {\n    return `V${Math.floor((100 - vbrScale) / 10)}`;\n}\nexport class MpegParser extends AbstractID3Parser {\n    constructor() {\n        super(...arguments);\n        this.frameCount = 0;\n        this.syncFrameCount = -1;\n        this.countSkipFrameData = 0;\n        this.totalDataLength = 0;\n        this.bitrates = [];\n        this.offset = 0;\n        this.frame_size = 0;\n        this.crc = null;\n        this.calculateEofDuration = false;\n        this.samplesPerFrame = null;\n        this.buf_frame_header = new Uint8Array(4);\n        /**\n         * Number of bytes already parsed since beginning of stream / file\n         */\n        this.mpegOffset = null;\n        this.syncPeek = {\n            buf: new Uint8Array(maxPeekLen),\n            len: 0\n        };\n    }\n    /**\n     * Called after ID3 headers have been parsed\n     */\n    async postId3v2Parse() {\n        this.metadata.setFormat('lossless', false);\n        this.metadata.setAudioOnly();\n        try {\n            let quit = false;\n            while (!quit) {\n                await this.sync();\n                quit = await this.parseCommonMpegHeader();\n            }\n        }\n        catch (err) {\n            if (err instanceof EndOfStreamError) {\n                debug(\"End-of-stream\");\n                if (this.calculateEofDuration) {\n                    if (this.samplesPerFrame !== null) {\n                        const numberOfSamples = this.frameCount * this.samplesPerFrame;\n                        this.metadata.setFormat('numberOfSamples', numberOfSamples);\n                        if (this.metadata.format.sampleRate) {\n                            const duration = numberOfSamples / this.metadata.format.sampleRate;\n                            debug(`Calculate duration at EOF: ${duration} sec.`, duration);\n                            this.metadata.setFormat('duration', duration);\n                        }\n                    }\n                }\n            }\n            else {\n                throw err;\n            }\n        }\n    }\n    /**\n     * Called after file has been fully parsed, this allows, if present, to exclude the ID3v1.1 header length\n     */\n    finalize() {\n        const format = this.metadata.format;\n        const hasID3v1 = !!this.metadata.native.ID3v1;\n        if (this.mpegOffset !== null) {\n            if (format.duration && this.tokenizer.fileInfo.size) {\n                const mpegSize = this.tokenizer.fileInfo.size - this.mpegOffset - (hasID3v1 ? 128 : 0);\n                if (format.codecProfile && format.codecProfile[0] === 'V') {\n                    this.metadata.setFormat('bitrate', mpegSize * 8 / format.duration);\n                }\n            }\n            if (this.tokenizer.fileInfo.size && format.codecProfile === 'CBR') {\n                const mpegSize = this.tokenizer.fileInfo.size - this.mpegOffset - (hasID3v1 ? 128 : 0);\n                if (this.frame_size !== null && this.samplesPerFrame !== null) {\n                    const numberOfSamples = Math.round(mpegSize / this.frame_size) * this.samplesPerFrame;\n                    this.metadata.setFormat('numberOfSamples', numberOfSamples);\n                    if (format.sampleRate && !format.duration) {\n                        const duration = numberOfSamples / format.sampleRate;\n                        debug(\"Calculate CBR duration based on file size: %s\", duration);\n                        this.metadata.setFormat('duration', duration);\n                    }\n                }\n            }\n        }\n    }\n    async sync() {\n        let gotFirstSync = false;\n        while (true) {\n            let bo = 0;\n            this.syncPeek.len = await this.tokenizer.peekBuffer(this.syncPeek.buf, { length: maxPeekLen, mayBeLess: true });\n            if (this.syncPeek.len <= 163) {\n                throw new EndOfStreamError();\n            }\n            while (true) {\n                if (gotFirstSync && (this.syncPeek.buf[bo] & 0xE0) === 0xE0) {\n                    this.buf_frame_header[0] = MpegFrameHeader.SyncByte1;\n                    this.buf_frame_header[1] = this.syncPeek.buf[bo];\n                    await this.tokenizer.ignore(bo);\n                    debug(`Sync at offset=${this.tokenizer.position - 1}, frameCount=${this.frameCount}`);\n                    if (this.syncFrameCount === this.frameCount) {\n                        debug(`Re-synced MPEG stream, frameCount=${this.frameCount}`);\n                        this.frameCount = 0;\n                        this.frame_size = 0;\n                    }\n                    this.syncFrameCount = this.frameCount;\n                    return; // sync\n                }\n                gotFirstSync = false;\n                bo = this.syncPeek.buf.indexOf(MpegFrameHeader.SyncByte1, bo);\n                if (bo === -1) {\n                    if (this.syncPeek.len < this.syncPeek.buf.length) {\n                        throw new EndOfStreamError();\n                    }\n                    await this.tokenizer.ignore(this.syncPeek.len);\n                    break; // continue with next buffer\n                }\n                ++bo;\n                gotFirstSync = true;\n            }\n        }\n    }\n    /**\n     * Combined ADTS & MPEG (MP2 & MP3) header handling\n     * @return {Promise<boolean>} true if parser should quit\n     */\n    async parseCommonMpegHeader() {\n        if (this.frameCount === 0) {\n            this.mpegOffset = this.tokenizer.position - 1;\n        }\n        await this.tokenizer.peekBuffer(this.buf_frame_header.subarray(1), { length: 3 });\n        let header;\n        try {\n            header = FrameHeader.get(this.buf_frame_header, 0);\n        }\n        catch (err) {\n            await this.tokenizer.ignore(1);\n            if (err instanceof Error) {\n                this.metadata.addWarning(`Parse error: ${err.message}`);\n                return false; // sync\n            }\n            throw err;\n        }\n        await this.tokenizer.ignore(3);\n        this.metadata.setFormat('container', header.container);\n        this.metadata.setFormat('codec', header.codec);\n        this.metadata.setFormat('lossless', false);\n        this.metadata.setFormat('sampleRate', header.samplingRate);\n        this.frameCount++;\n        return header.version !== null && header.version >= 2 && header.layer === 0 ? this.parseAdts(header) : this.parseAudioFrameHeader(header);\n    }\n    /**\n     * @return {Promise<boolean>} true if parser should quit\n     */\n    async parseAudioFrameHeader(header) {\n        this.metadata.setFormat('numberOfChannels', header.channelMode === 'mono' ? 1 : 2);\n        this.metadata.setFormat('bitrate', header.bitrate);\n        if (this.frameCount < 20 * 10000) {\n            debug('offset=%s MP%s bitrate=%s sample-rate=%s', this.tokenizer.position - 4, header.layer, header.bitrate, header.samplingRate);\n        }\n        const slot_size = header.calcSlotSize();\n        if (slot_size === null) {\n            throw new MpegContentError('invalid slot_size');\n        }\n        const samples_per_frame = header.calcSamplesPerFrame();\n        debug(`samples_per_frame=${samples_per_frame}`);\n        const bps = samples_per_frame / 8.0;\n        if (header.bitrate !== null && header.samplingRate != null) {\n            const fsize = (bps * header.bitrate / header.samplingRate) + ((header.padding) ? slot_size : 0);\n            this.frame_size = Math.floor(fsize);\n        }\n        this.audioFrameHeader = header;\n        if (header.bitrate !== null) {\n            this.bitrates.push(header.bitrate);\n        }\n        // xtra header only exists in first frame\n        if (this.frameCount === 1) {\n            this.offset = FrameHeader.len;\n            await this.skipSideInformation();\n            return false;\n        }\n        if (this.frameCount === 3) {\n            // the stream is CBR if the first 3 frame bitrates are the same\n            if (this.areAllSame(this.bitrates)) {\n                // Actual calculation will be done in finalize\n                this.samplesPerFrame = samples_per_frame;\n                this.metadata.setFormat('codecProfile', 'CBR');\n                if (this.tokenizer.fileInfo.size)\n                    return true; // Will calculate duration based on the file size\n            }\n            else if (this.metadata.format.duration) {\n                return true; // We already got the duration, stop processing MPEG stream any further\n            }\n            if (!this.options.duration) {\n                return true; // Enforce duration not enabled, stop processing entire stream\n            }\n        }\n        // once we know the file is VBR attach listener to end of\n        // stream so we can do the duration calculation when we\n        // have counted all the frames\n        if (this.options.duration && this.frameCount === 4) {\n            this.samplesPerFrame = samples_per_frame;\n            this.calculateEofDuration = true;\n        }\n        this.offset = 4;\n        if (header.isProtectedByCRC) {\n            await this.parseCrc();\n            return false;\n        }\n        await this.skipSideInformation();\n        return false;\n    }\n    async parseAdts(header) {\n        const buf = new Uint8Array(3);\n        await this.tokenizer.readBuffer(buf);\n        header.frameLength += common.getBitAllignedNumber(buf, 0, 0, 11);\n        this.totalDataLength += header.frameLength;\n        this.samplesPerFrame = 1024;\n        if (header.samplingRate !== null) {\n            const framesPerSec = header.samplingRate / this.samplesPerFrame;\n            const bytesPerFrame = this.frameCount === 0 ? 0 : this.totalDataLength / this.frameCount;\n            const bitrate = 8 * bytesPerFrame * framesPerSec + 0.5;\n            this.metadata.setFormat('bitrate', bitrate);\n            debug(`frame-count=${this.frameCount}, size=${header.frameLength} bytes, bit-rate=${bitrate}`);\n        }\n        await this.tokenizer.ignore(header.frameLength > 7 ? header.frameLength - 7 : 1);\n        // Consume remaining header and frame data\n        if (this.frameCount === 3) {\n            this.metadata.setFormat('codecProfile', header.codecProfile);\n            if (header.mp4ChannelConfig) {\n                this.metadata.setFormat('numberOfChannels', header.mp4ChannelConfig.length);\n            }\n            if (this.options.duration) {\n                this.calculateEofDuration = true;\n            }\n            else {\n                return true; // Stop parsing after the third frame\n            }\n        }\n        return false;\n    }\n    async parseCrc() {\n        this.crc = await this.tokenizer.readNumber(Token.INT16_BE);\n        this.offset += 2;\n        return this.skipSideInformation();\n    }\n    async skipSideInformation() {\n        if (this.audioFrameHeader) {\n            const sideinfo_length = this.audioFrameHeader.calculateSideInfoLength();\n            if (sideinfo_length !== null) {\n                await this.tokenizer.readToken(new Token.Uint8ArrayType(sideinfo_length));\n                // side information\n                this.offset += sideinfo_length;\n                await this.readXtraInfoHeader();\n                return;\n            }\n        }\n    }\n    async readXtraInfoHeader() {\n        const headerTag = await this.tokenizer.readToken(InfoTagHeaderTag);\n        this.offset += InfoTagHeaderTag.len; // 12\n        switch (headerTag) {\n            case 'Info':\n                this.metadata.setFormat('codecProfile', 'CBR');\n                return this.readXingInfoHeader();\n            case 'Xing': {\n                const infoTag = await this.readXingInfoHeader();\n                if (infoTag.vbrScale !== null) {\n                    const codecProfile = getVbrCodecProfile(infoTag.vbrScale);\n                    this.metadata.setFormat('codecProfile', codecProfile);\n                }\n                return null;\n            }\n            case 'Xtra':\n                // ToDo: ???\n                break;\n            case 'LAME': {\n                const version = await this.tokenizer.readToken(LameEncoderVersion);\n                if (this.frame_size !== null && this.frame_size >= this.offset + LameEncoderVersion.len) {\n                    this.offset += LameEncoderVersion.len;\n                    this.metadata.setFormat('tool', `LAME ${version}`);\n                    await this.skipFrameData(this.frame_size - this.offset);\n                    return null;\n                }\n                this.metadata.addWarning('Corrupt LAME header');\n                break;\n            }\n            // ToDo: ???\n        }\n        // ToDo: promise duration???\n        const frameDataLeft = this.frame_size - this.offset;\n        if (frameDataLeft < 0) {\n            this.metadata.addWarning(`Frame ${this.frameCount}corrupt: negative frameDataLeft`);\n        }\n        else {\n            await this.skipFrameData(frameDataLeft);\n        }\n        return null;\n    }\n    /**\n     * Ref: http://gabriel.mp3-tech.org/mp3infotag.html\n     * @returns {Promise<string>}\n     */\n    async readXingInfoHeader() {\n        const offset = this.tokenizer.position;\n        const infoTag = await readXingHeader(this.tokenizer);\n        this.offset += this.tokenizer.position - offset;\n        if (infoTag.lame) {\n            this.metadata.setFormat('tool', `LAME ${common.stripNulls(infoTag.lame.version)}`);\n            if (infoTag.lame.extended) {\n                // this.metadata.setFormat('trackGain', infoTag.lame.extended.track_gain);\n                this.metadata.setFormat('trackPeakLevel', infoTag.lame.extended.track_peak);\n                if (infoTag.lame.extended.track_gain) {\n                    this.metadata.setFormat('trackGain', infoTag.lame.extended.track_gain.adjustment);\n                }\n                if (infoTag.lame.extended.album_gain) {\n                    this.metadata.setFormat('albumGain', infoTag.lame.extended.album_gain.adjustment);\n                }\n                this.metadata.setFormat('duration', infoTag.lame.extended.music_length / 1000);\n            }\n        }\n        if (infoTag.streamSize && this.audioFrameHeader && infoTag.numFrames !== null) {\n            const duration = this.audioFrameHeader.calcDuration(infoTag.numFrames);\n            this.metadata.setFormat('duration', duration);\n            debug('Get duration from Xing header: %s', this.metadata.format.duration);\n            return infoTag;\n        }\n        // frames field is not present\n        const frameDataLeft = this.frame_size - this.offset;\n        await this.skipFrameData(frameDataLeft);\n        return infoTag;\n    }\n    async skipFrameData(frameDataLeft) {\n        if (frameDataLeft < 0)\n            throw new MpegContentError('frame-data-left cannot be negative');\n        await this.tokenizer.ignore(frameDataLeft);\n        this.countSkipFrameData += frameDataLeft;\n    }\n    areAllSame(array) {\n        const first = array[0];\n        return array.every(element => {\n            return element === first;\n        });\n    }\n}\n//# sourceMappingURL=MpegParser.js.map","import { hexToUint8Array, uint8ArrayToHex } from 'uint8array-extras';\n/**\n * Ref:\n * - https://tools.ietf.org/html/draft-fleischman-asf-01, Appendix A: ASF GUIDs\n * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/10_asf_guids.html\n * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/index.html\n * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/10_asf_guids.html\n *\n * ASF File Structure:\n * - https://msdn.microsoft.com/en-us/library/windows/desktop/ee663575(v=vs.85).aspx\n *\n * ASF GUIDs:\n * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/10_asf_guids.html\n * - https://github.com/dji-sdk/FFmpeg/blob/master/libavformat/asf.c\n */\nclass GUID {\n    static fromBin(bin, offset = 0) {\n        return new GUID(GUID.decode(bin, offset));\n    }\n    /**\n     * Decode GUID in format like \"B503BF5F-2EA9-CF11-8EE3-00C00C205365\"\n     * @param objectId Binary GUID\n     * @param offset Read offset in bytes, default 0\n     * @returns GUID as dashed hexadecimal representation\n     */\n    static decode(objectId, offset = 0) {\n        const view = new DataView(objectId.buffer, offset);\n        const guid = `${view.getUint32(0, true).toString(16)}-${view.getUint16(4, true).toString(16)}-${view.getUint16(6, true).toString(16)}-${view.getUint16(8).toString(16)}-${uint8ArrayToHex(objectId.slice(offset + 10, offset + 16))}`;\n        return guid.toUpperCase();\n    }\n    /**\n     * Decode stream type\n     * @param mediaType Media type GUID\n     * @returns Media type\n     */\n    static decodeMediaType(mediaType) {\n        switch (mediaType.str) {\n            case GUID.AudioMedia.str: return 'audio';\n            case GUID.VideoMedia.str: return 'video';\n            case GUID.CommandMedia.str: return 'command';\n            case GUID.Degradable_JPEG_Media.str: return 'degradable-jpeg';\n            case GUID.FileTransferMedia.str: return 'file-transfer';\n            case GUID.BinaryMedia.str: return 'binary';\n        }\n    }\n    /**\n     * Encode GUID\n     * @param guid GUID like: \"B503BF5F-2EA9-CF11-8EE3-00C00C205365\"\n     * @returns Encoded Binary GUID\n     */\n    static encode(str) {\n        const bin = new Uint8Array(16);\n        const view = new DataView(bin.buffer);\n        view.setUint32(0, Number.parseInt(str.slice(0, 8), 16), true);\n        view.setUint16(4, Number.parseInt(str.slice(9, 13), 16), true);\n        view.setUint16(6, Number.parseInt(str.slice(14, 18), 16), true);\n        bin.set(hexToUint8Array(str.slice(19, 23)), 8);\n        bin.set(hexToUint8Array(str.slice(24)), 10);\n        return bin;\n    }\n    constructor(str) {\n        this.str = str;\n    }\n    equals(guid) {\n        return this.str === guid.str;\n    }\n    toBin() {\n        return GUID.encode(this.str);\n    }\n}\n// 10.1 Top-level ASF object GUIDs\nGUID.HeaderObject = new GUID(\"75B22630-668E-11CF-A6D9-00AA0062CE6C\");\nGUID.DataObject = new GUID(\"75B22636-668E-11CF-A6D9-00AA0062CE6C\");\nGUID.SimpleIndexObject = new GUID(\"33000890-E5B1-11CF-89F4-00A0C90349CB\");\nGUID.IndexObject = new GUID(\"D6E229D3-35DA-11D1-9034-00A0C90349BE\");\nGUID.MediaObjectIndexObject = new GUID(\"FEB103F8-12AD-4C64-840F-2A1D2F7AD48C\");\nGUID.TimecodeIndexObject = new GUID(\"3CB73FD0-0C4A-4803-953D-EDF7B6228F0C\");\n// 10.2 Header Object GUIDs\nGUID.FilePropertiesObject = new GUID(\"8CABDCA1-A947-11CF-8EE4-00C00C205365\");\nGUID.StreamPropertiesObject = new GUID(\"B7DC0791-A9B7-11CF-8EE6-00C00C205365\");\nGUID.HeaderExtensionObject = new GUID(\"5FBF03B5-A92E-11CF-8EE3-00C00C205365\");\nGUID.CodecListObject = new GUID(\"86D15240-311D-11D0-A3A4-00A0C90348F6\");\nGUID.ScriptCommandObject = new GUID(\"1EFB1A30-0B62-11D0-A39B-00A0C90348F6\");\nGUID.MarkerObject = new GUID(\"F487CD01-A951-11CF-8EE6-00C00C205365\");\nGUID.BitrateMutualExclusionObject = new GUID(\"D6E229DC-35DA-11D1-9034-00A0C90349BE\");\nGUID.ErrorCorrectionObject = new GUID(\"75B22635-668E-11CF-A6D9-00AA0062CE6C\");\nGUID.ContentDescriptionObject = new GUID(\"75B22633-668E-11CF-A6D9-00AA0062CE6C\");\nGUID.ExtendedContentDescriptionObject = new GUID(\"D2D0A440-E307-11D2-97F0-00A0C95EA850\");\nGUID.ContentBrandingObject = new GUID(\"2211B3FA-BD23-11D2-B4B7-00A0C955FC6E\");\nGUID.StreamBitratePropertiesObject = new GUID(\"7BF875CE-468D-11D1-8D82-006097C9A2B2\");\nGUID.ContentEncryptionObject = new GUID(\"2211B3FB-BD23-11D2-B4B7-00A0C955FC6E\");\nGUID.ExtendedContentEncryptionObject = new GUID(\"298AE614-2622-4C17-B935-DAE07EE9289C\");\nGUID.DigitalSignatureObject = new GUID(\"2211B3FC-BD23-11D2-B4B7-00A0C955FC6E\");\nGUID.PaddingObject = new GUID(\"1806D474-CADF-4509-A4BA-9AABCB96AAE8\");\n// 10.3 Header Extension Object GUIDs\nGUID.ExtendedStreamPropertiesObject = new GUID(\"14E6A5CB-C672-4332-8399-A96952065B5A\");\nGUID.AdvancedMutualExclusionObject = new GUID(\"A08649CF-4775-4670-8A16-6E35357566CD\");\nGUID.GroupMutualExclusionObject = new GUID(\"D1465A40-5A79-4338-B71B-E36B8FD6C249\");\nGUID.StreamPrioritizationObject = new GUID(\"D4FED15B-88D3-454F-81F0-ED5C45999E24\");\nGUID.BandwidthSharingObject = new GUID(\"A69609E6-517B-11D2-B6AF-00C04FD908E9\");\nGUID.LanguageListObject = new GUID(\"7C4346A9-EFE0-4BFC-B229-393EDE415C85\");\nGUID.MetadataObject = new GUID(\"C5F8CBEA-5BAF-4877-8467-AA8C44FA4CCA\");\nGUID.MetadataLibraryObject = new GUID(\"44231C94-9498-49D1-A141-1D134E457054\");\nGUID.IndexParametersObject = new GUID(\"D6E229DF-35DA-11D1-9034-00A0C90349BE\");\nGUID.MediaObjectIndexParametersObject = new GUID(\"6B203BAD-3F11-48E4-ACA8-D7613DE2CFA7\");\nGUID.TimecodeIndexParametersObject = new GUID(\"F55E496D-9797-4B5D-8C8B-604DFE9BFB24\");\nGUID.CompatibilityObject = new GUID(\"26F18B5D-4584-47EC-9F5F-0E651F0452C9\");\nGUID.AdvancedContentEncryptionObject = new GUID(\"43058533-6981-49E6-9B74-AD12CB86D58C\");\n// 10.4 Stream Properties Object Stream Type GUIDs\nGUID.AudioMedia = new GUID(\"F8699E40-5B4D-11CF-A8FD-00805F5C442B\");\nGUID.VideoMedia = new GUID(\"BC19EFC0-5B4D-11CF-A8FD-00805F5C442B\");\nGUID.CommandMedia = new GUID(\"59DACFC0-59E6-11D0-A3AC-00A0C90348F6\");\nGUID.JFIF_Media = new GUID(\"B61BE100-5B4E-11CF-A8FD-00805F5C442B\");\nGUID.Degradable_JPEG_Media = new GUID(\"35907DE0-E415-11CF-A917-00805F5C442B\");\nGUID.FileTransferMedia = new GUID(\"91BD222C-F21C-497A-8B6D-5AA86BFC0185\");\nGUID.BinaryMedia = new GUID(\"3AFB65E2-47EF-40F2-AC2C-70A90D71D343\");\nGUID.ASF_Index_Placeholder_Object = new GUID(\"D9AADE20-7C17-4F9C-BC28-8555DD98E2A2\");\nexport default GUID;\n//# sourceMappingURL=GUID.js.map","import * as Token from 'token-types';\nimport * as util from '../common/Util.js';\nexport function getParserForAttr(i) {\n    return attributeParsers[i];\n}\nexport function parseUnicodeAttr(uint8Array) {\n    return util.stripNulls(util.decodeString(uint8Array, 'utf-16le'));\n}\nconst attributeParsers = [\n    parseUnicodeAttr,\n    parseByteArrayAttr,\n    parseBoolAttr,\n    parseDWordAttr,\n    parseQWordAttr,\n    parseWordAttr,\n    parseByteArrayAttr\n];\nfunction parseByteArrayAttr(buf) {\n    return new Uint8Array(buf);\n}\nfunction parseBoolAttr(buf, offset = 0) {\n    return parseWordAttr(buf, offset) === 1;\n}\nfunction parseDWordAttr(buf, offset = 0) {\n    return Token.UINT32_LE.get(buf, offset);\n}\nfunction parseQWordAttr(buf, offset = 0) {\n    return Token.UINT64_LE.get(buf, offset);\n}\nfunction parseWordAttr(buf, offset = 0) {\n    return Token.UINT16_LE.get(buf, offset);\n}\n//# sourceMappingURL=AsfUtil.js.map","// ASF Objects\nimport * as Token from 'token-types';\nimport * as util from '../common/Util.js';\nimport GUID from './GUID.js';\nimport { getParserForAttr, parseUnicodeAttr } from './AsfUtil.js';\nimport { AttachedPictureType } from '../id3v2/ID3v2Token.js';\nimport { makeUnexpectedFileContentError } from '../ParseError.js';\nexport class AsfContentParseError extends makeUnexpectedFileContentError('ASF') {\n}\n/**\n * Data Type: Specifies the type of information being stored. The following values are recognized.\n */\nexport const DataType = {\n    /**\n     * Unicode string. The data consists of a sequence of Unicode characters.\n     */\n    UnicodeString: 0,\n    /**\n     * BYTE array. The type of data is implementation-specific.\n     */\n    ByteArray: 1,\n    /**\n     * BOOL. The data is 2 bytes long and should be interpreted as a 16-bit unsigned integer. Only 0x0000 or 0x0001 are permitted values.\n     */\n    Bool: 2,\n    /**\n     * DWORD. The data is 4 bytes long and should be interpreted as a 32-bit unsigned integer.\n     */\n    DWord: 3,\n    /**\n     * QWORD. The data is 8 bytes long and should be interpreted as a 64-bit unsigned integer.\n     */\n    QWord: 4,\n    /**\n     * WORD. The data is 2 bytes long and should be interpreted as a 16-bit unsigned integer.\n     */\n    Word: 5\n};\n/**\n * Token for: 3. ASF top-level Header Object\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3\n */\nexport const TopLevelHeaderObjectToken = {\n    len: 30,\n    get: (buf, off) => {\n        return {\n            objectId: GUID.fromBin(buf, off),\n            objectSize: Number(Token.UINT64_LE.get(buf, off + 16)),\n            numberOfHeaderObjects: Token.UINT32_LE.get(buf, off + 24)\n            // Reserved: 2 bytes\n        };\n    }\n};\n/**\n * Token for: 3.1 Header Object (mandatory, one only)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_1\n */\nexport const HeaderObjectToken = {\n    len: 24,\n    get: (buf, off) => {\n        return {\n            objectId: GUID.fromBin(buf, off),\n            objectSize: Number(Token.UINT64_LE.get(buf, off + 16))\n        };\n    }\n};\nexport class State {\n    constructor(header) {\n        this.len = Number(header.objectSize) - HeaderObjectToken.len;\n    }\n    postProcessTag(tags, name, valueType, data) {\n        if (name === 'WM/Picture') {\n            tags.push({ id: name, value: WmPictureToken.fromBuffer(data) });\n        }\n        else {\n            const parseAttr = getParserForAttr(valueType);\n            if (!parseAttr) {\n                throw new AsfContentParseError(`unexpected value headerType: ${valueType}`);\n            }\n            tags.push({ id: name, value: parseAttr(data) });\n        }\n    }\n}\n// ToDo: use ignore type\nexport class IgnoreObjectState extends State {\n    get(_buf, _off) {\n        return null;\n    }\n}\n/**\n * Token for: 3.2: File Properties Object (mandatory, one only)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_2\n */\nexport class FilePropertiesObject extends State {\n    get(buf, off) {\n        return {\n            fileId: GUID.fromBin(buf, off),\n            fileSize: Token.UINT64_LE.get(buf, off + 16),\n            creationDate: Token.UINT64_LE.get(buf, off + 24),\n            dataPacketsCount: Token.UINT64_LE.get(buf, off + 32),\n            playDuration: Token.UINT64_LE.get(buf, off + 40),\n            sendDuration: Token.UINT64_LE.get(buf, off + 48),\n            preroll: Token.UINT64_LE.get(buf, off + 56),\n            flags: {\n                broadcast: util.getBit(buf, off + 64, 24),\n                seekable: util.getBit(buf, off + 64, 25)\n            },\n            // flagsNumeric: Token.UINT32_LE.get(buf, off + 64),\n            minimumDataPacketSize: Token.UINT32_LE.get(buf, off + 68),\n            maximumDataPacketSize: Token.UINT32_LE.get(buf, off + 72),\n            maximumBitrate: Token.UINT32_LE.get(buf, off + 76)\n        };\n    }\n}\nFilePropertiesObject.guid = GUID.FilePropertiesObject;\n/**\n * Token for: 3.3 Stream Properties Object (mandatory, one per stream)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_3\n */\nexport class StreamPropertiesObject extends State {\n    get(buf, off) {\n        return {\n            streamType: GUID.decodeMediaType(GUID.fromBin(buf, off)),\n            errorCorrectionType: GUID.fromBin(buf, off + 8)\n            // ToDo\n        };\n    }\n}\nStreamPropertiesObject.guid = GUID.StreamPropertiesObject;\n/**\n * 3.4: Header Extension Object (mandatory, one only)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_4\n */\nexport class HeaderExtensionObject {\n    constructor() {\n        this.len = 22;\n    }\n    get(buf, off) {\n        const view = new DataView(buf.buffer, off);\n        return {\n            reserved1: GUID.fromBin(buf, off),\n            reserved2: view.getUint16(16, true),\n            extensionDataSize: view.getUint16(18, true)\n        };\n    }\n}\nHeaderExtensionObject.guid = GUID.HeaderExtensionObject;\n/**\n * 3.5: The Codec List Object provides user-friendly information about the codecs and formats used to encode the content found in the ASF file.\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_5\n */\nconst CodecListObjectHeader = {\n    len: 20,\n    get: (buf, off) => {\n        const view = new DataView(buf.buffer, off);\n        return {\n            entryCount: view.getUint16(16, true)\n        };\n    }\n};\nasync function readString(tokenizer) {\n    const length = await tokenizer.readNumber(Token.UINT16_LE);\n    return (await tokenizer.readToken(new Token.StringType(length * 2, 'utf-16le'))).replace('\\0', '');\n}\n/**\n * 3.5: Read the Codec-List-Object, which provides user-friendly information about the codecs and formats used to encode the content found in the ASF file.\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_5\n */\nexport async function readCodecEntries(tokenizer) {\n    const codecHeader = await tokenizer.readToken(CodecListObjectHeader);\n    const entries = [];\n    for (let i = 0; i < codecHeader.entryCount; ++i) {\n        entries.push(await readCodecEntry(tokenizer));\n    }\n    return entries;\n}\nasync function readInformation(tokenizer) {\n    const length = await tokenizer.readNumber(Token.UINT16_LE);\n    const buf = new Uint8Array(length);\n    await tokenizer.readBuffer(buf);\n    return buf;\n}\n/**\n * Read Codec-Entries\n * @param tokenizer\n */\nasync function readCodecEntry(tokenizer) {\n    const type = await tokenizer.readNumber(Token.UINT16_LE);\n    return {\n        type: {\n            videoCodec: (type & 0x0001) === 0x0001,\n            audioCodec: (type & 0x0002) === 0x0002\n        },\n        codecName: await readString(tokenizer),\n        description: await readString(tokenizer),\n        information: await readInformation(tokenizer)\n    };\n}\n/**\n * 3.10 Content Description Object (optional, one only)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_10\n */\nexport class ContentDescriptionObjectState extends State {\n    get(buf, off) {\n        const tags = [];\n        const view = new DataView(buf.buffer, off);\n        let pos = 10;\n        for (let i = 0; i < ContentDescriptionObjectState.contentDescTags.length; ++i) {\n            const length = view.getUint16(i * 2, true);\n            if (length > 0) {\n                const tagName = ContentDescriptionObjectState.contentDescTags[i];\n                const end = pos + length;\n                tags.push({ id: tagName, value: parseUnicodeAttr(buf.slice(off + pos, off + end)) });\n                pos = end;\n            }\n        }\n        return tags;\n    }\n}\nContentDescriptionObjectState.guid = GUID.ContentDescriptionObject;\nContentDescriptionObjectState.contentDescTags = ['Title', 'Author', 'Copyright', 'Description', 'Rating'];\n/**\n * 3.11 Extended Content Description Object (optional, one only)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_11\n */\nexport class ExtendedContentDescriptionObjectState extends State {\n    get(buf, off) {\n        const tags = [];\n        const view = new DataView(buf.buffer, off);\n        const attrCount = view.getUint16(0, true);\n        let pos = 2;\n        for (let i = 0; i < attrCount; i += 1) {\n            const nameLen = view.getUint16(pos, true);\n            pos += 2;\n            const name = parseUnicodeAttr(buf.slice(off + pos, off + pos + nameLen));\n            pos += nameLen;\n            const valueType = view.getUint16(pos, true);\n            pos += 2;\n            const valueLen = view.getUint16(pos, true);\n            pos += 2;\n            const value = buf.slice(off + pos, off + pos + valueLen);\n            pos += valueLen;\n            this.postProcessTag(tags, name, valueType, value);\n        }\n        return tags;\n    }\n}\nExtendedContentDescriptionObjectState.guid = GUID.ExtendedContentDescriptionObject;\n/**\n * 4.1 Extended Stream Properties Object (optional, 1 per media stream)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/04_objects_in_the_asf_header_extension_object.html#4_1\n */\nexport class ExtendedStreamPropertiesObjectState extends State {\n    get(buf, off) {\n        const view = new DataView(buf.buffer, off);\n        return {\n            startTime: Token.UINT64_LE.get(buf, off),\n            endTime: Token.UINT64_LE.get(buf, off + 8),\n            dataBitrate: view.getInt32(12, true),\n            bufferSize: view.getInt32(16, true),\n            initialBufferFullness: view.getInt32(20, true),\n            alternateDataBitrate: view.getInt32(24, true),\n            alternateBufferSize: view.getInt32(28, true),\n            alternateInitialBufferFullness: view.getInt32(32, true),\n            maximumObjectSize: view.getInt32(36, true),\n            flags: {\n                reliableFlag: util.getBit(buf, off + 40, 0),\n                seekableFlag: util.getBit(buf, off + 40, 1),\n                resendLiveCleanpointsFlag: util.getBit(buf, off + 40, 2)\n            },\n            // flagsNumeric: Token.UINT32_LE.get(buf, off + 64),\n            streamNumber: view.getInt16(42, true),\n            streamLanguageId: view.getInt16(44, true),\n            averageTimePerFrame: view.getInt32(52, true),\n            streamNameCount: view.getInt32(54, true),\n            payloadExtensionSystems: view.getInt32(56, true),\n            streamNames: [], // ToDo\n            streamPropertiesObject: null\n        };\n    }\n}\nExtendedStreamPropertiesObjectState.guid = GUID.ExtendedStreamPropertiesObject;\n/**\n * 4.7  Metadata Object (optional, 0 or 1)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/04_objects_in_the_asf_header_extension_object.html#4_7\n */\nexport class MetadataObjectState extends State {\n    get(uint8Array, off) {\n        const tags = [];\n        const view = new DataView(uint8Array.buffer, off);\n        const descriptionRecordsCount = view.getUint16(0, true);\n        let pos = 2;\n        for (let i = 0; i < descriptionRecordsCount; i += 1) {\n            pos += 4;\n            const nameLen = view.getUint16(pos, true);\n            pos += 2;\n            const dataType = view.getUint16(pos, true);\n            pos += 2;\n            const dataLen = view.getUint32(pos, true);\n            pos += 4;\n            const name = parseUnicodeAttr(uint8Array.slice(off + pos, off + pos + nameLen));\n            pos += nameLen;\n            const data = uint8Array.slice(off + pos, off + pos + dataLen);\n            pos += dataLen;\n            this.postProcessTag(tags, name, dataType, data);\n        }\n        return tags;\n    }\n}\nMetadataObjectState.guid = GUID.MetadataObject;\n// 4.8\tMetadata Library Object (optional, 0 or 1)\nexport class MetadataLibraryObjectState extends MetadataObjectState {\n}\nMetadataLibraryObjectState.guid = GUID.MetadataLibraryObject;\n/**\n * Ref: https://msdn.microsoft.com/en-us/library/windows/desktop/dd757977(v=vs.85).aspx\n */\nexport class WmPictureToken {\n    static fromBuffer(buffer) {\n        const pic = new WmPictureToken(buffer.length);\n        return pic.get(buffer, 0);\n    }\n    constructor(len) {\n        this.len = len;\n    }\n    get(buffer, offset) {\n        const view = new DataView(buffer.buffer, offset);\n        const typeId = view.getUint8(0);\n        const size = view.getInt32(1, true);\n        let index = 5;\n        while (view.getUint16(index) !== 0) {\n            index += 2;\n        }\n        const format = new Token.StringType(index - 5, 'utf-16le').get(buffer, 5);\n        while (view.getUint16(index) !== 0) {\n            index += 2;\n        }\n        const description = new Token.StringType(index - 5, 'utf-16le').get(buffer, 5);\n        return {\n            type: AttachedPictureType[typeId],\n            format,\n            description,\n            size,\n            data: buffer.slice(index + 4)\n        };\n    }\n}\n//# sourceMappingURL=AsfObject.js.map","import initDebug from 'debug';\nimport { TrackType } from '../type.js';\nimport GUID from './GUID.js';\nimport * as AsfObject from './AsfObject.js';\nimport { BasicParser } from '../common/BasicParser.js';\nimport { AsfContentParseError } from './AsfObject.js';\nconst debug = initDebug('music-metadata:parser:ASF');\nconst headerType = 'asf';\n/**\n * Windows Media Metadata Usage Guidelines\n * - Ref: https://msdn.microsoft.com/en-us/library/ms867702.aspx\n *\n * Ref:\n * - https://tools.ietf.org/html/draft-fleischman-asf-01\n * - https://hwiegman.home.xs4all.nl/fileformats/asf/ASF_Specification.pdf\n * - http://drang.s4.xrea.com/program/tips/id3tag/wmp/index.html\n * - https://msdn.microsoft.com/en-us/library/windows/desktop/ee663575(v=vs.85).aspx\n */\nexport class AsfParser extends BasicParser {\n    async parse() {\n        const header = await this.tokenizer.readToken(AsfObject.TopLevelHeaderObjectToken);\n        if (!header.objectId.equals(GUID.HeaderObject)) {\n            throw new AsfContentParseError(`expected asf header; but was not found; got: ${header.objectId.str}`);\n        }\n        try {\n            await this.parseObjectHeader(header.numberOfHeaderObjects);\n        }\n        catch (err) {\n            debug('Error while parsing ASF: %s', err);\n        }\n    }\n    async parseObjectHeader(numberOfObjectHeaders) {\n        let tags;\n        do {\n            // Parse common header of the ASF Object (3.1)\n            const header = await this.tokenizer.readToken(AsfObject.HeaderObjectToken);\n            // Parse data part of the ASF Object\n            debug('header GUID=%s', header.objectId.str);\n            switch (header.objectId.str) {\n                case AsfObject.FilePropertiesObject.guid.str: { // 3.2\n                    const fpo = await this.tokenizer.readToken(new AsfObject.FilePropertiesObject(header));\n                    this.metadata.setFormat('duration', Number(fpo.playDuration / BigInt(1000)) / 10000 - Number(fpo.preroll) / 1000);\n                    this.metadata.setFormat('bitrate', fpo.maximumBitrate);\n                    break;\n                }\n                case AsfObject.StreamPropertiesObject.guid.str: { // 3.3\n                    const spo = await this.tokenizer.readToken(new AsfObject.StreamPropertiesObject(header));\n                    this.metadata.setFormat('container', `ASF/${spo.streamType}`);\n                    break;\n                }\n                case AsfObject.HeaderExtensionObject.guid.str: { // 3.4\n                    const extHeader = await this.tokenizer.readToken(new AsfObject.HeaderExtensionObject());\n                    await this.parseExtensionObject(extHeader.extensionDataSize);\n                    break;\n                }\n                case AsfObject.ContentDescriptionObjectState.guid.str: // 3.10\n                    tags = await this.tokenizer.readToken(new AsfObject.ContentDescriptionObjectState(header));\n                    await this.addTags(tags);\n                    break;\n                case AsfObject.ExtendedContentDescriptionObjectState.guid.str: // 3.11\n                    tags = await this.tokenizer.readToken(new AsfObject.ExtendedContentDescriptionObjectState(header));\n                    await this.addTags(tags);\n                    break;\n                case GUID.CodecListObject.str: {\n                    const codecs = await AsfObject.readCodecEntries(this.tokenizer);\n                    codecs.forEach(codec => {\n                        this.metadata.addStreamInfo({\n                            type: codec.type.videoCodec ? TrackType.video : TrackType.audio,\n                            codecName: codec.codecName\n                        });\n                    });\n                    const audioCodecs = codecs.filter(codec => codec.type.audioCodec).map(codec => codec.codecName).join('/');\n                    this.metadata.setFormat('codec', audioCodecs);\n                    break;\n                }\n                case GUID.StreamBitratePropertiesObject.str:\n                    // ToDo?\n                    await this.tokenizer.ignore(header.objectSize - AsfObject.HeaderObjectToken.len);\n                    break;\n                case GUID.PaddingObject.str:\n                    // ToDo: register bytes pad\n                    debug('Padding: %s bytes', header.objectSize - AsfObject.HeaderObjectToken.len);\n                    await this.tokenizer.ignore(header.objectSize - AsfObject.HeaderObjectToken.len);\n                    break;\n                default:\n                    this.metadata.addWarning(`Ignore ASF-Object-GUID: ${header.objectId.str}`);\n                    debug('Ignore ASF-Object-GUID: %s', header.objectId.str);\n                    await this.tokenizer.readToken(new AsfObject.IgnoreObjectState(header));\n            }\n        } while (--numberOfObjectHeaders);\n        // done\n    }\n    async addTags(tags) {\n        await Promise.all(tags.map(({ id, value }) => this.metadata.addTag(headerType, id, value)));\n    }\n    async parseExtensionObject(extensionSize) {\n        do {\n            // Parse common header of the ASF Object (3.1)\n            const header = await this.tokenizer.readToken(AsfObject.HeaderObjectToken);\n            const remaining = header.objectSize - AsfObject.HeaderObjectToken.len;\n            // Parse data part of the ASF Object\n            switch (header.objectId.str) {\n                case AsfObject.ExtendedStreamPropertiesObjectState.guid.str: // 4.1\n                    // ToDo: extended stream header properties are ignored\n                    await this.tokenizer.readToken(new AsfObject.ExtendedStreamPropertiesObjectState(header));\n                    break;\n                case AsfObject.MetadataObjectState.guid.str: { // 4.7\n                    const moTags = await this.tokenizer.readToken(new AsfObject.MetadataObjectState(header));\n                    await this.addTags(moTags);\n                    break;\n                }\n                case AsfObject.MetadataLibraryObjectState.guid.str: { // 4.8\n                    const mlTags = await this.tokenizer.readToken(new AsfObject.MetadataLibraryObjectState(header));\n                    await this.addTags(mlTags);\n                    break;\n                }\n                case GUID.PaddingObject.str:\n                    // ToDo: register bytes pad\n                    await this.tokenizer.ignore(remaining);\n                    break;\n                case GUID.CompatibilityObject.str:\n                    await this.tokenizer.ignore(remaining);\n                    break;\n                case GUID.ASF_Index_Placeholder_Object.str:\n                    await this.tokenizer.ignore(remaining);\n                    break;\n                default:\n                    this.metadata.addWarning(`Ignore ASF-Object-GUID: ${header.objectId.str}`);\n                    // console.log(\"Ignore ASF-Object-GUID: %s\", header.objectId.str);\n                    await this.tokenizer.readToken(new AsfObject.IgnoreObjectState(header));\n                    break;\n            }\n            extensionSize -= header.objectSize;\n        } while (extensionSize > 0);\n    }\n}\n//# sourceMappingURL=AsfParser.js.map","import * as Token from 'token-types';\nimport { FourCcToken } from '../common/FourCC.js';\n/**\n * DSDIFF chunk header\n * The data-size encoding is deviating from EA-IFF 85\n * Ref: http://www.sonicstudio.com/pdf/dsd/DSDIFF_1.5_Spec.pdf\n */\nexport const ChunkHeader64 = {\n    len: 12,\n    get: (buf, off) => {\n        return {\n            // Group-ID\n            chunkID: FourCcToken.get(buf, off),\n            // Size\n            chunkSize: Token.INT64_BE.get(buf, off + 4)\n        };\n    }\n};\n//# sourceMappingURL=DsdiffToken.js.map","import * as Token from 'token-types';\nimport initDebug from 'debug';\nimport * as strtok3 from 'strtok3';\nimport { FourCcToken } from '../common/FourCC.js';\nimport { BasicParser } from '../common/BasicParser.js';\nimport { ID3v2Parser } from '../id3v2/ID3v2Parser.js';\nimport { ChunkHeader64 } from './DsdiffToken.js';\nimport { makeUnexpectedFileContentError } from '../ParseError.js';\nconst debug = initDebug('music-metadata:parser:aiff');\nexport class DsdiffContentParseError extends makeUnexpectedFileContentError('DSDIFF') {\n}\n/**\n * DSDIFF - Direct Stream Digital Interchange File Format (Phillips)\n *\n * Ref:\n * - http://www.sonicstudio.com/pdf/dsd/DSDIFF_1.5_Spec.pdf\n */\nexport class DsdiffParser extends BasicParser {\n    async parse() {\n        const header = await this.tokenizer.readToken(ChunkHeader64);\n        if (header.chunkID !== 'FRM8')\n            throw new DsdiffContentParseError('Unexpected chunk-ID');\n        this.metadata.setAudioOnly();\n        const type = (await this.tokenizer.readToken(FourCcToken)).trim();\n        switch (type) {\n            case 'DSD':\n                this.metadata.setFormat('container', `DSDIFF/${type}`);\n                this.metadata.setFormat('lossless', true);\n                return this.readFmt8Chunks(header.chunkSize - BigInt(FourCcToken.len));\n            default:\n                throw new DsdiffContentParseError(`Unsupported DSDIFF type: ${type}`);\n        }\n    }\n    async readFmt8Chunks(remainingSize) {\n        while (remainingSize >= ChunkHeader64.len) {\n            const chunkHeader = await this.tokenizer.readToken(ChunkHeader64);\n            //  If the data is an odd number of bytes in length, a pad byte must be added at the end\n            debug(`Chunk id=${chunkHeader.chunkID}`);\n            await this.readData(chunkHeader);\n            remainingSize -= (BigInt(ChunkHeader64.len) + chunkHeader.chunkSize);\n        }\n    }\n    async readData(header) {\n        debug(`Reading data of chunk[ID=${header.chunkID}, size=${header.chunkSize}]`);\n        const p0 = this.tokenizer.position;\n        switch (header.chunkID.trim()) {\n            case 'FVER': { // 3.1 FORMAT VERSION CHUNK\n                const version = await this.tokenizer.readToken(Token.UINT32_LE);\n                debug(`DSDIFF version=${version}`);\n                break;\n            }\n            case 'PROP': { // 3.2 PROPERTY CHUNK\n                const propType = await this.tokenizer.readToken(FourCcToken);\n                if (propType !== 'SND ')\n                    throw new DsdiffContentParseError('Unexpected PROP-chunk ID');\n                await this.handleSoundPropertyChunks(header.chunkSize - BigInt(FourCcToken.len));\n                break;\n            }\n            case 'ID3': { // Unofficial ID3 tag support\n                const id3_data = await this.tokenizer.readToken(new Token.Uint8ArrayType(Number(header.chunkSize)));\n                const rst = strtok3.fromBuffer(id3_data);\n                await new ID3v2Parser().parse(this.metadata, rst, this.options);\n                break;\n            }\n            case 'DSD':\n                if (this.metadata.format.numberOfChannels) {\n                    this.metadata.setFormat('numberOfSamples', Number(header.chunkSize * BigInt(8) / BigInt(this.metadata.format.numberOfChannels)));\n                }\n                if (this.metadata.format.numberOfSamples && this.metadata.format.sampleRate) {\n                    this.metadata.setFormat('duration', this.metadata.format.numberOfSamples / this.metadata.format.sampleRate);\n                }\n                break;\n            default:\n                debug(`Ignore chunk[ID=${header.chunkID}, size=${header.chunkSize}]`);\n                break;\n        }\n        const remaining = header.chunkSize - BigInt(this.tokenizer.position - p0);\n        if (remaining > 0) {\n            debug(`After Parsing chunk, remaining ${remaining} bytes`);\n            await this.tokenizer.ignore(Number(remaining));\n        }\n    }\n    async handleSoundPropertyChunks(remainingSize) {\n        debug(`Parsing sound-property-chunks, remainingSize=${remainingSize}`);\n        while (remainingSize > 0) {\n            const sndPropHeader = await this.tokenizer.readToken(ChunkHeader64);\n            debug(`Sound-property-chunk[ID=${sndPropHeader.chunkID}, size=${sndPropHeader.chunkSize}]`);\n            const p0 = this.tokenizer.position;\n            switch (sndPropHeader.chunkID.trim()) {\n                case 'FS': { // 3.2.1 Sample Rate Chunk\n                    const sampleRate = await this.tokenizer.readToken(Token.UINT32_BE);\n                    this.metadata.setFormat('sampleRate', sampleRate);\n                    break;\n                }\n                case 'CHNL': { // 3.2.2 Channels Chunk\n                    const numChannels = await this.tokenizer.readToken(Token.UINT16_BE);\n                    this.metadata.setFormat('numberOfChannels', numChannels);\n                    await this.handleChannelChunks(sndPropHeader.chunkSize - BigInt(Token.UINT16_BE.len));\n                    break;\n                }\n                case 'CMPR': { // 3.2.3 Compression Type Chunk\n                    const compressionIdCode = (await this.tokenizer.readToken(FourCcToken)).trim();\n                    const count = await this.tokenizer.readToken(Token.UINT8);\n                    const compressionName = await this.tokenizer.readToken(new Token.StringType(count, 'ascii'));\n                    if (compressionIdCode === 'DSD') {\n                        this.metadata.setFormat('lossless', true);\n                        this.metadata.setFormat('bitsPerSample', 1);\n                    }\n                    this.metadata.setFormat('codec', `${compressionIdCode} (${compressionName})`);\n                    break;\n                }\n                case 'ABSS': { // 3.2.4 Absolute Start Time Chunk\n                    const hours = await this.tokenizer.readToken(Token.UINT16_BE);\n                    const minutes = await this.tokenizer.readToken(Token.UINT8);\n                    const seconds = await this.tokenizer.readToken(Token.UINT8);\n                    const samples = await this.tokenizer.readToken(Token.UINT32_BE);\n                    debug(`ABSS ${hours}:${minutes}:${seconds}.${samples}`);\n                    break;\n                }\n                case 'LSCO': { // 3.2.5 Loudspeaker Configuration Chunk\n                    const lsConfig = await this.tokenizer.readToken(Token.UINT16_BE);\n                    debug(`LSCO lsConfig=${lsConfig}`);\n                    break;\n                }\n                default:\n                    debug(`Unknown sound-property-chunk[ID=${sndPropHeader.chunkID}, size=${sndPropHeader.chunkSize}]`);\n                    await this.tokenizer.ignore(Number(sndPropHeader.chunkSize));\n            }\n            const remaining = sndPropHeader.chunkSize - BigInt(this.tokenizer.position - p0);\n            if (remaining > 0) {\n                debug(`After Parsing sound-property-chunk ${sndPropHeader.chunkSize}, remaining ${remaining} bytes`);\n                await this.tokenizer.ignore(Number(remaining));\n            }\n            remainingSize -= BigInt(ChunkHeader64.len) + sndPropHeader.chunkSize;\n            debug(`Parsing sound-property-chunks, remainingSize=${remainingSize}`);\n        }\n        if (this.metadata.format.lossless && this.metadata.format.sampleRate && this.metadata.format.numberOfChannels && this.metadata.format.bitsPerSample) {\n            const bitrate = this.metadata.format.sampleRate * this.metadata.format.numberOfChannels * this.metadata.format.bitsPerSample;\n            this.metadata.setFormat('bitrate', bitrate);\n        }\n    }\n    async handleChannelChunks(remainingSize) {\n        debug(`Parsing channel-chunks, remainingSize=${remainingSize}`);\n        const channels = [];\n        while (remainingSize >= FourCcToken.len) {\n            const channelId = await this.tokenizer.readToken(FourCcToken);\n            debug(`Channel[ID=${channelId}]`);\n            channels.push(channelId);\n            remainingSize -= BigInt(FourCcToken.len);\n        }\n        debug(`Channels: ${channels.join(', ')}`);\n        return channels;\n    }\n}\n//# sourceMappingURL=DsdiffParser.js.map","import * as Token from 'token-types';\nimport { FourCcToken } from '../common/FourCC.js';\nimport { makeUnexpectedFileContentError } from '../ParseError.js';\nexport const compressionTypes = {\n    NONE: 'not compressed\tPCM\tApple Computer',\n    sowt: 'PCM (byte swapped)',\n    fl32: '32-bit floating point IEEE 32-bit float',\n    fl64: '64-bit floating point IEEE 64-bit float\tApple Computer',\n    alaw: 'ALaw 2:1\t8-bit ITU-T G.711 A-law',\n    ulaw: 'µLaw 2:1\t8-bit ITU-T G.711 µ-law\tApple Computer',\n    ULAW: 'CCITT G.711 u-law 8-bit ITU-T G.711 µ-law',\n    ALAW: 'CCITT G.711 A-law 8-bit ITU-T G.711 A-law',\n    FL32: 'Float 32\tIEEE 32-bit float '\n};\nexport class AiffContentError extends makeUnexpectedFileContentError('AIFF') {\n}\nexport class Common {\n    constructor(header, isAifc) {\n        this.isAifc = isAifc;\n        const minimumChunkSize = isAifc ? 22 : 18;\n        if (header.chunkSize < minimumChunkSize)\n            throw new AiffContentError(`COMMON CHUNK size should always be at least ${minimumChunkSize}`);\n        this.len = header.chunkSize;\n    }\n    get(buf, off) {\n        // see: https://cycling74.com/forums/aiffs-80-bit-sample-rate-value\n        const shift = Token.UINT16_BE.get(buf, off + 8) - 16398;\n        const baseSampleRate = Token.UINT16_BE.get(buf, off + 8 + 2);\n        const res = {\n            numChannels: Token.UINT16_BE.get(buf, off),\n            numSampleFrames: Token.UINT32_BE.get(buf, off + 2),\n            sampleSize: Token.UINT16_BE.get(buf, off + 6),\n            sampleRate: shift < 0 ? baseSampleRate >> Math.abs(shift) : baseSampleRate << shift\n        };\n        if (this.isAifc) {\n            res.compressionType = FourCcToken.get(buf, off + 18);\n            if (this.len > 22) {\n                const strLen = Token.UINT8.get(buf, off + 22);\n                if (strLen > 0) {\n                    const padding = (strLen + 1) % 2;\n                    if (23 + strLen + padding === this.len) {\n                        res.compressionName = new Token.StringType(strLen, 'latin1').get(buf, off + 23);\n                    }\n                    else {\n                        throw new AiffContentError('Illegal pstring length');\n                    }\n                }\n                else {\n                    res.compressionName = undefined;\n                }\n            }\n        }\n        else {\n            res.compressionName = 'PCM';\n        }\n        return res;\n    }\n}\n//# sourceMappingURL=AiffToken.js.map","import * as Token from 'token-types';\nimport { FourCcToken } from '../common/FourCC.js';\n/**\n * Common AIFF chunk header\n */\nexport const Header = {\n    len: 8,\n    get: (buf, off) => {\n        return {\n            // Chunk type ID\n            chunkID: FourCcToken.get(buf, off),\n            // Chunk size\n            chunkSize: Number(BigInt(Token.UINT32_BE.get(buf, off + 4)))\n        };\n    }\n};\n//# sourceMappingURL=index.js.map","import * as Token from 'token-types';\nimport initDebug from 'debug';\nimport * as strtok3 from 'strtok3';\nimport { ID3v2Parser } from '../id3v2/ID3v2Parser.js';\nimport { FourCcToken } from '../common/FourCC.js';\nimport { BasicParser } from '../common/BasicParser.js';\nimport * as AiffToken from './AiffToken.js';\nimport { AiffContentError, compressionTypes } from './AiffToken.js';\nimport * as iff from '../iff/index.js';\nconst debug = initDebug('music-metadata:parser:aiff');\n/**\n * AIFF - Audio Interchange File Format\n *\n * Ref:\n * - http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/AIFF.html\n * - http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/Docs/AIFF-1.3.pdf\n */\nexport class AIFFParser extends BasicParser {\n    constructor() {\n        super(...arguments);\n        this.isCompressed = null;\n    }\n    async parse() {\n        const header = await this.tokenizer.readToken(iff.Header);\n        if (header.chunkID !== 'FORM')\n            throw new AiffContentError('Invalid Chunk-ID, expected \\'FORM\\''); // Not AIFF format\n        const type = await this.tokenizer.readToken(FourCcToken);\n        switch (type) {\n            case 'AIFF':\n                this.metadata.setFormat('container', type);\n                this.isCompressed = false;\n                break;\n            case 'AIFC':\n                this.metadata.setFormat('container', 'AIFF-C');\n                this.isCompressed = true;\n                break;\n            default:\n                throw new AiffContentError(`Unsupported AIFF type: ${type}`);\n        }\n        this.metadata.setFormat('lossless', !this.isCompressed);\n        this.metadata.setAudioOnly();\n        try {\n            while (!this.tokenizer.fileInfo.size || this.tokenizer.fileInfo.size - this.tokenizer.position >= iff.Header.len) {\n                debug(`Reading AIFF chunk at offset=${this.tokenizer.position}`);\n                const chunkHeader = await this.tokenizer.readToken(iff.Header);\n                const nextChunk = 2 * Math.round(chunkHeader.chunkSize / 2);\n                const bytesRead = await this.readData(chunkHeader);\n                await this.tokenizer.ignore(nextChunk - bytesRead);\n            }\n        }\n        catch (err) {\n            if (err instanceof strtok3.EndOfStreamError) {\n                debug(\"End-of-stream\");\n            }\n            else {\n                throw err;\n            }\n        }\n    }\n    async readData(header) {\n        switch (header.chunkID) {\n            case 'COMM': { // The Common Chunk\n                if (this.isCompressed === null) {\n                    throw new AiffContentError('Failed to parse AIFF.COMM chunk when compression type is unknown');\n                }\n                const common = await this.tokenizer.readToken(new AiffToken.Common(header, this.isCompressed));\n                this.metadata.setFormat('bitsPerSample', common.sampleSize);\n                this.metadata.setFormat('sampleRate', common.sampleRate);\n                this.metadata.setFormat('numberOfChannels', common.numChannels);\n                this.metadata.setFormat('numberOfSamples', common.numSampleFrames);\n                this.metadata.setFormat('duration', common.numSampleFrames / common.sampleRate);\n                if (common.compressionName || common.compressionType) {\n                    this.metadata.setFormat('codec', common.compressionName ?? compressionTypes[common.compressionType]);\n                }\n                return header.chunkSize;\n            }\n            case 'ID3 ': { // ID3-meta-data\n                const id3_data = await this.tokenizer.readToken(new Token.Uint8ArrayType(header.chunkSize));\n                const rst = strtok3.fromBuffer(id3_data);\n                await new ID3v2Parser().parse(this.metadata, rst, this.options);\n                return header.chunkSize;\n            }\n            case 'SSND': // Sound Data Chunk\n                if (this.metadata.format.duration) {\n                    this.metadata.setFormat('bitrate', 8 * header.chunkSize / this.metadata.format.duration);\n                }\n                return 0;\n            case 'NAME': // Sample name chunk\n            case 'AUTH': // Author chunk\n            case '(c) ': // Copyright chunk\n            case 'ANNO': // Annotation chunk\n                return this.readTextChunk(header);\n            default:\n                debug(`Ignore chunk id=${header.chunkID}, size=${header.chunkSize}`);\n                return 0;\n        }\n    }\n    async readTextChunk(header) {\n        const value = await this.tokenizer.readToken(new Token.StringType(header.chunkSize, 'ascii'));\n        const values = value.split('\\0').map(v => v.trim()).filter(v => v?.length);\n        await Promise.all(values.map(v => this.metadata.addTag('AIFF', header.chunkID, v)));\n        return header.chunkSize;\n    }\n}\n//# sourceMappingURL=AiffParser.js.map","import * as Token from 'token-types';\nimport { FourCcToken } from '../common/FourCC.js';\n/**\n * Common chunk DSD header: the 'chunk name (Four-CC)' & chunk size\n */\nexport const ChunkHeader = {\n    len: 12,\n    get: (buf, off) => {\n        return { id: FourCcToken.get(buf, off), size: Token.UINT64_LE.get(buf, off + 4) };\n    }\n};\n/**\n * Common chunk DSD header: the 'chunk name (Four-CC)' & chunk size\n */\nexport const DsdChunk = {\n    len: 16,\n    get: (buf, off) => {\n        return {\n            fileSize: Token.INT64_LE.get(buf, off),\n            metadataPointer: Token.INT64_LE.get(buf, off + 8)\n        };\n    }\n};\nexport const ChannelType = {\n    mono: 1,\n    stereo: 2,\n    channels: 3,\n    quad: 4,\n    '4 channels': 5,\n    '5 channels': 6,\n    '5.1 channels': 7\n};\n/**\n * Common chunk DSD header: the 'chunk name (Four-CC)' & chunk size\n */\nexport const FormatChunk = {\n    len: 40,\n    get: (buf, off) => {\n        return {\n            formatVersion: Token.INT32_LE.get(buf, off),\n            formatID: Token.INT32_LE.get(buf, off + 4),\n            channelType: Token.INT32_LE.get(buf, off + 8),\n            channelNum: Token.INT32_LE.get(buf, off + 12),\n            samplingFrequency: Token.INT32_LE.get(buf, off + 16),\n            bitsPerSample: Token.INT32_LE.get(buf, off + 20),\n            sampleCount: Token.INT64_LE.get(buf, off + 24),\n            blockSizePerChannel: Token.INT32_LE.get(buf, off + 32)\n        };\n    }\n};\n//# sourceMappingURL=DsfChunk.js.map","import initDebug from 'debug';\nimport { AbstractID3Parser } from '../id3v2/AbstractID3Parser.js';\nimport { ChunkHeader, DsdChunk, FormatChunk } from './DsfChunk.js';\nimport { ID3v2Parser } from \"../id3v2/ID3v2Parser.js\";\nimport { makeUnexpectedFileContentError } from '../ParseError.js';\nconst debug = initDebug('music-metadata:parser:DSF');\nexport class DsdContentParseError extends makeUnexpectedFileContentError('DSD') {\n}\n/**\n * DSF (dsd stream file) File Parser\n * Ref: https://dsd-guide.com/sites/default/files/white-papers/DSFFileFormatSpec_E.pdf\n */\nexport class DsfParser extends AbstractID3Parser {\n    async postId3v2Parse() {\n        const p0 = this.tokenizer.position; // mark start position, normally 0\n        const chunkHeader = await this.tokenizer.readToken(ChunkHeader);\n        if (chunkHeader.id !== 'DSD ')\n            throw new DsdContentParseError('Invalid chunk signature');\n        this.metadata.setFormat('container', 'DSF');\n        this.metadata.setFormat('lossless', true);\n        this.metadata.setAudioOnly();\n        const dsdChunk = await this.tokenizer.readToken(DsdChunk);\n        if (dsdChunk.metadataPointer === BigInt(0)) {\n            debug(\"No ID3v2 tag present\");\n        }\n        else {\n            debug(`expect ID3v2 at offset=${dsdChunk.metadataPointer}`);\n            await this.parseChunks(dsdChunk.fileSize - chunkHeader.size);\n            // Jump to ID3 header\n            await this.tokenizer.ignore(Number(dsdChunk.metadataPointer) - this.tokenizer.position - p0);\n            return new ID3v2Parser().parse(this.metadata, this.tokenizer, this.options);\n        }\n    }\n    async parseChunks(bytesRemaining) {\n        while (bytesRemaining >= ChunkHeader.len) {\n            const chunkHeader = await this.tokenizer.readToken(ChunkHeader);\n            debug(`Parsing chunk name=${chunkHeader.id} size=${chunkHeader.size}`);\n            switch (chunkHeader.id) {\n                case 'fmt ': {\n                    const formatChunk = await this.tokenizer.readToken(FormatChunk);\n                    this.metadata.setFormat('numberOfChannels', formatChunk.channelNum);\n                    this.metadata.setFormat('sampleRate', formatChunk.samplingFrequency);\n                    this.metadata.setFormat('bitsPerSample', formatChunk.bitsPerSample);\n                    this.metadata.setFormat('numberOfSamples', formatChunk.sampleCount);\n                    this.metadata.setFormat('duration', Number(formatChunk.sampleCount) / formatChunk.samplingFrequency);\n                    const bitrate = formatChunk.bitsPerSample * formatChunk.samplingFrequency * formatChunk.channelNum;\n                    this.metadata.setFormat('bitrate', bitrate);\n                    return; // We got what we want, stop further processing of chunks\n                }\n                default:\n                    this.tokenizer.ignore(Number(chunkHeader.size) - ChunkHeader.len);\n                    break;\n            }\n            bytesRemaining -= chunkHeader.size;\n        }\n    }\n}\n//# sourceMappingURL=DsfParser.js.map","import * as Token from 'token-types';\nimport { AttachedPictureType } from '../../id3v2/ID3v2Token.js';\n/**\n * Parse the METADATA_BLOCK_PICTURE\n * Ref: https://wiki.xiph.org/VorbisComment#METADATA_BLOCK_PICTURE\n * Ref: https://xiph.org/flac/format.html#metadata_block_picture\n * // ToDo: move to ID3 / APIC?\n */\nexport class VorbisPictureToken {\n    static fromBase64(base64str) {\n        return VorbisPictureToken.fromBuffer(Uint8Array.from(atob(base64str), c => c.charCodeAt(0)));\n    }\n    static fromBuffer(buffer) {\n        const pic = new VorbisPictureToken(buffer.length);\n        return pic.get(buffer, 0);\n    }\n    constructor(len) {\n        this.len = len;\n    }\n    get(buffer, offset) {\n        const type = AttachedPictureType[Token.UINT32_BE.get(buffer, offset)];\n        offset += 4;\n        const mimeLen = Token.UINT32_BE.get(buffer, offset);\n        offset += 4;\n        const format = new Token.StringType(mimeLen, 'utf-8').get(buffer, offset);\n        offset += mimeLen;\n        const descLen = Token.UINT32_BE.get(buffer, offset);\n        offset += 4;\n        const description = new Token.StringType(descLen, 'utf-8').get(buffer, offset);\n        offset += descLen;\n        const width = Token.UINT32_BE.get(buffer, offset);\n        offset += 4;\n        const height = Token.UINT32_BE.get(buffer, offset);\n        offset += 4;\n        const colour_depth = Token.UINT32_BE.get(buffer, offset);\n        offset += 4;\n        const indexed_color = Token.UINT32_BE.get(buffer, offset);\n        offset += 4;\n        const picDataLen = Token.UINT32_BE.get(buffer, offset);\n        offset += 4;\n        const data = Uint8Array.from(buffer.slice(offset, offset + picDataLen));\n        return {\n            type,\n            format,\n            description,\n            width,\n            height,\n            colour_depth,\n            indexed_color,\n            data\n        };\n    }\n}\n/**\n * Comment header decoder\n * Ref: https://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-620004.2.1\n */\nexport const CommonHeader = {\n    len: 7,\n    get: (buf, off) => {\n        return {\n            packetType: Token.UINT8.get(buf, off),\n            vorbis: new Token.StringType(6, 'ascii').get(buf, off + 1)\n        };\n    }\n};\n/**\n * Identification header decoder\n * Ref: https://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-630004.2.2\n */\nexport const IdentificationHeader = {\n    len: 23,\n    get: (uint8Array, off) => {\n        return {\n            version: Token.UINT32_LE.get(uint8Array, off + 0),\n            channelMode: Token.UINT8.get(uint8Array, off + 4),\n            sampleRate: Token.UINT32_LE.get(uint8Array, off + 5),\n            bitrateMax: Token.UINT32_LE.get(uint8Array, off + 9),\n            bitrateNominal: Token.UINT32_LE.get(uint8Array, off + 13),\n            bitrateMin: Token.UINT32_LE.get(uint8Array, off + 17)\n        };\n    }\n};\n//# sourceMappingURL=Vorbis.js.map","import * as Token from 'token-types';\nexport class VorbisDecoder {\n    constructor(data, offset) {\n        this.data = data;\n        this.offset = offset;\n    }\n    readInt32() {\n        const value = Token.UINT32_LE.get(this.data, this.offset);\n        this.offset += 4;\n        return value;\n    }\n    readStringUtf8() {\n        const len = this.readInt32();\n        const value = new TextDecoder('utf-8').decode(this.data.subarray(this.offset, this.offset + len));\n        this.offset += len;\n        return value;\n    }\n    parseUserComment() {\n        const offset0 = this.offset;\n        const v = this.readStringUtf8();\n        const idx = v.indexOf('=');\n        return {\n            key: v.slice(0, idx).toUpperCase(),\n            value: v.slice(idx + 1),\n            len: this.offset - offset0\n        };\n    }\n}\n//# sourceMappingURL=VorbisDecoder.js.map","import * as Token from 'token-types';\nimport debugInit from 'debug';\nimport { VorbisDecoder } from './VorbisDecoder.js';\nimport { CommonHeader, IdentificationHeader, VorbisPictureToken } from './Vorbis.js';\nimport { makeUnexpectedFileContentError } from '../../ParseError.js';\nconst debug = debugInit('music-metadata:parser:ogg:vorbis1');\nexport class VorbisContentError extends makeUnexpectedFileContentError('Vorbis') {\n}\n/**\n * Vorbis 1 Parser.\n * Used by OggStream\n */\nexport class VorbisStream {\n    constructor(metadata, options) {\n        this.pageSegments = [];\n        this.metadata = metadata;\n        this.options = options;\n    }\n    /**\n     * Vorbis 1 parser\n     * @param header Ogg Page Header\n     * @param pageData Page data\n     */\n    async parsePage(header, pageData) {\n        this.lastPageHeader = header;\n        if (header.headerType.firstPage) {\n            this.parseFirstPage(header, pageData);\n        }\n        else {\n            if (header.headerType.continued) {\n                if (this.pageSegments.length === 0) {\n                    throw new VorbisContentError('Cannot continue on previous page');\n                }\n                this.pageSegments.push(pageData);\n            }\n            if (header.headerType.lastPage || !header.headerType.continued) {\n                // Flush page segments\n                if (this.pageSegments.length > 0) {\n                    const fullPage = VorbisStream.mergeUint8Arrays(this.pageSegments);\n                    await this.parseFullPage(fullPage);\n                }\n                // Reset page segments\n                this.pageSegments = header.headerType.lastPage ? [] : [pageData];\n            }\n        }\n    }\n    static mergeUint8Arrays(arrays) {\n        const totalSize = arrays.reduce((acc, e) => acc + e.length, 0);\n        const merged = new Uint8Array(totalSize);\n        arrays.forEach((array, i, _arrays) => {\n            const offset = _arrays.slice(0, i).reduce((acc, e) => acc + e.length, 0);\n            merged.set(array, offset);\n        });\n        return merged;\n    }\n    async flush() {\n        await this.parseFullPage(VorbisStream.mergeUint8Arrays(this.pageSegments));\n    }\n    async parseUserComment(pageData, offset) {\n        const decoder = new VorbisDecoder(pageData, offset);\n        const tag = decoder.parseUserComment();\n        await this.addTag(tag.key, tag.value);\n        return tag.len;\n    }\n    async addTag(id, value) {\n        if (id === 'METADATA_BLOCK_PICTURE' && (typeof value === 'string')) {\n            if (this.options.skipCovers) {\n                debug(\"Ignore picture\");\n                return;\n            }\n            value = VorbisPictureToken.fromBase64(value);\n            debug(`Push picture: id=${id}, format=${value.format}`);\n        }\n        else {\n            debug(`Push tag: id=${id}, value=${value}`);\n        }\n        await this.metadata.addTag('vorbis', id, value);\n    }\n    calculateDuration() {\n        if (this.lastPageHeader && this.metadata.format.sampleRate && this.lastPageHeader.absoluteGranulePosition >= 0) {\n            // Calculate duration\n            this.metadata.setFormat('numberOfSamples', this.lastPageHeader.absoluteGranulePosition);\n            this.metadata.setFormat('duration', this.lastPageHeader.absoluteGranulePosition / this.metadata.format.sampleRate);\n        }\n    }\n    /**\n     * Parse first Ogg/Vorbis page\n     * @param header\n     * @param pageData\n     */\n    parseFirstPage(_header, pageData) {\n        this.metadata.setFormat('codec', 'Vorbis I');\n        this.metadata.setFormat('hasAudio', true);\n        debug('Parse first page');\n        // Parse  Vorbis common header\n        const commonHeader = CommonHeader.get(pageData, 0);\n        if (commonHeader.vorbis !== 'vorbis')\n            throw new VorbisContentError('Metadata does not look like Vorbis');\n        if (commonHeader.packetType === 1) {\n            const idHeader = IdentificationHeader.get(pageData, CommonHeader.len);\n            this.metadata.setFormat('sampleRate', idHeader.sampleRate);\n            this.metadata.setFormat('bitrate', idHeader.bitrateNominal);\n            this.metadata.setFormat('numberOfChannels', idHeader.channelMode);\n            debug('sample-rate=%s[hz], bitrate=%s[b/s], channel-mode=%s', idHeader.sampleRate, idHeader.bitrateNominal, idHeader.channelMode);\n        }\n        else\n            throw new VorbisContentError('First Ogg page should be type 1: the identification header');\n    }\n    async parseFullPage(pageData) {\n        // New page\n        const commonHeader = CommonHeader.get(pageData, 0);\n        debug('Parse full page: type=%s, byteLength=%s', commonHeader.packetType, pageData.byteLength);\n        switch (commonHeader.packetType) {\n            case 3: //  type 3: comment header\n                return this.parseUserCommentList(pageData, CommonHeader.len);\n            case 1: // type 1: the identification header\n            case 5: // type 5: setup header type\n                break; // ignore\n        }\n    }\n    /**\n     * Ref: https://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-840005.2\n     */\n    async parseUserCommentList(pageData, offset) {\n        const strLen = Token.UINT32_LE.get(pageData, offset);\n        offset += 4;\n        // const vendorString = new Token.StringType(strLen, 'utf-8').get(pageData, offset);\n        offset += strLen;\n        let userCommentListLength = Token.UINT32_LE.get(pageData, offset);\n        offset += 4;\n        while (userCommentListLength-- > 0) {\n            offset += (await this.parseUserComment(pageData, offset));\n        }\n    }\n}\n//# sourceMappingURL=VorbisStream.js.map","import { UINT16_BE, UINT24_BE, Uint8ArrayType } from 'token-types';\nimport initDebug from 'debug';\nimport * as util from '../common/Util.js';\nimport { VorbisPictureToken } from '../ogg/vorbis/Vorbis.js';\nimport { AbstractID3Parser } from '../id3v2/AbstractID3Parser.js';\nimport { FourCcToken } from '../common/FourCC.js';\nimport { VorbisStream } from '../ogg/vorbis/VorbisStream.js';\nimport { VorbisDecoder } from '../ogg/vorbis/VorbisDecoder.js';\nimport { makeUnexpectedFileContentError } from '../ParseError.js';\nconst debug = initDebug('music-metadata:parser:FLAC');\nclass FlacContentError extends makeUnexpectedFileContentError('FLAC') {\n}\n/**\n * FLAC supports up to 128 kinds of metadata blocks; currently the following are defined:\n * ref: https://xiph.org/flac/format.html#metadata_block\n */\nconst BlockType = {\n    STREAMINFO: 0, // STREAMINFO\n    PADDING: 1, // PADDING\n    APPLICATION: 2, // APPLICATION\n    SEEKTABLE: 3, // SEEKTABLE\n    VORBIS_COMMENT: 4, // VORBIS_COMMENT\n    CUESHEET: 5, // CUESHEET\n    PICTURE: 6 // PICTURE\n};\nexport class FlacParser extends AbstractID3Parser {\n    constructor() {\n        super(...arguments);\n        this.vorbisParser = new VorbisStream(this.metadata, this.options);\n        this.padding = 0;\n    }\n    async postId3v2Parse() {\n        const fourCC = await this.tokenizer.readToken(FourCcToken);\n        if (fourCC.toString() !== 'fLaC') {\n            throw new FlacContentError('Invalid FLAC preamble');\n        }\n        this.metadata.setAudioOnly();\n        let blockHeader;\n        do {\n            // Read block header\n            blockHeader = await this.tokenizer.readToken(BlockHeader);\n            // Parse block data\n            await this.parseDataBlock(blockHeader);\n        } while (!blockHeader.lastBlock);\n        if (this.tokenizer.fileInfo.size && this.metadata.format.duration) {\n            const dataSize = this.tokenizer.fileInfo.size - this.tokenizer.position;\n            this.metadata.setFormat('bitrate', 8 * dataSize / this.metadata.format.duration);\n        }\n    }\n    async parseDataBlock(blockHeader) {\n        debug(`blockHeader type=${blockHeader.type}, length=${blockHeader.length}`);\n        switch (blockHeader.type) {\n            case BlockType.STREAMINFO:\n                return this.parseBlockStreamInfo(blockHeader.length);\n            case BlockType.PADDING:\n                this.padding += blockHeader.length;\n                break;\n            case BlockType.APPLICATION:\n                break;\n            case BlockType.SEEKTABLE:\n                break;\n            case BlockType.VORBIS_COMMENT:\n                return this.parseComment(blockHeader.length);\n            case BlockType.CUESHEET:\n                break;\n            case BlockType.PICTURE:\n                await this.parsePicture(blockHeader.length);\n                return;\n            default:\n                this.metadata.addWarning(`Unknown block type: ${blockHeader.type}`);\n        }\n        // Ignore data block\n        return this.tokenizer.ignore(blockHeader.length).then();\n    }\n    /**\n     * Parse STREAMINFO\n     */\n    async parseBlockStreamInfo(dataLen) {\n        if (dataLen !== BlockStreamInfo.len)\n            throw new FlacContentError('Unexpected block-stream-info length');\n        const streamInfo = await this.tokenizer.readToken(BlockStreamInfo);\n        this.metadata.setFormat('container', 'FLAC');\n        this.metadata.setFormat('codec', 'FLAC');\n        this.metadata.setFormat('lossless', true);\n        this.metadata.setFormat('numberOfChannels', streamInfo.channels);\n        this.metadata.setFormat('bitsPerSample', streamInfo.bitsPerSample);\n        this.metadata.setFormat('sampleRate', streamInfo.sampleRate);\n        if (streamInfo.totalSamples > 0) {\n            this.metadata.setFormat('duration', streamInfo.totalSamples / streamInfo.sampleRate);\n        }\n    }\n    /**\n     * Parse VORBIS_COMMENT\n     * Ref: https://www.xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-640004.2.3\n     */\n    async parseComment(dataLen) {\n        const data = await this.tokenizer.readToken(new Uint8ArrayType(dataLen));\n        const decoder = new VorbisDecoder(data, 0);\n        decoder.readStringUtf8(); // vendor (skip)\n        const commentListLength = decoder.readInt32();\n        const tags = new Array(commentListLength);\n        for (let i = 0; i < commentListLength; i++) {\n            tags[i] = decoder.parseUserComment();\n        }\n        await Promise.all(tags.map(tag => this.vorbisParser.addTag(tag.key, tag.value)));\n    }\n    async parsePicture(dataLen) {\n        if (this.options.skipCovers) {\n            return this.tokenizer.ignore(dataLen);\n        }\n        const picture = await this.tokenizer.readToken(new VorbisPictureToken(dataLen));\n        this.vorbisParser.addTag('METADATA_BLOCK_PICTURE', picture);\n    }\n}\nconst BlockHeader = {\n    len: 4,\n    get: (buf, off) => {\n        return {\n            lastBlock: util.getBit(buf, off, 7),\n            type: util.getBitAllignedNumber(buf, off, 1, 7),\n            length: UINT24_BE.get(buf, off + 1)\n        };\n    }\n};\n/**\n * METADATA_BLOCK_DATA\n * Ref: https://xiph.org/flac/format.html#metadata_block_streaminfo\n */\nconst BlockStreamInfo = {\n    len: 34,\n    get: (buf, off) => {\n        return {\n            // The minimum block size (in samples) used in the stream.\n            minimumBlockSize: UINT16_BE.get(buf, off),\n            // The maximum block size (in samples) used in the stream.\n            // (Minimum blocksize == maximum blocksize) implies a fixed-blocksize stream.\n            maximumBlockSize: UINT16_BE.get(buf, off + 2) / 1000,\n            // The minimum frame size (in bytes) used in the stream.\n            // May be 0 to imply the value is not known.\n            minimumFrameSize: UINT24_BE.get(buf, off + 4),\n            // The maximum frame size (in bytes) used in the stream.\n            // May be 0 to imply the value is not known.\n            maximumFrameSize: UINT24_BE.get(buf, off + 7),\n            // Sample rate in Hz. Though 20 bits are available,\n            // the maximum sample rate is limited by the structure of frame headers to 655350Hz.\n            // Also, a value of 0 is invalid.\n            sampleRate: UINT24_BE.get(buf, off + 10) >> 4,\n            // probably slower: sampleRate: common.getBitAllignedNumber(buf, off + 10, 0, 20),\n            // (number of channels)-1. FLAC supports from 1 to 8 channels\n            channels: util.getBitAllignedNumber(buf, off + 12, 4, 3) + 1,\n            // bits per sample)-1.\n            // FLAC supports from 4 to 32 bits per sample. Currently the reference encoder and decoders only support up to 24 bits per sample.\n            bitsPerSample: util.getBitAllignedNumber(buf, off + 12, 7, 5) + 1,\n            // Total samples in stream.\n            // 'Samples' means inter-channel sample, i.e. one second of 44.1Khz audio will have 44100 samples regardless of the number of channels.\n            // A value of zero here means the number of total samples is unknown.\n            totalSamples: util.getBitAllignedNumber(buf, off + 13, 4, 36),\n            // the MD5 hash of the file (see notes for usage... it's a littly tricky)\n            fileMD5: new Uint8ArrayType(16).get(buf, off + 18)\n        };\n    }\n};\n//# sourceMappingURL=FlacParser.js.map","export const DataType = {\n    string: 0,\n    uint: 1,\n    uid: 2,\n    bool: 3,\n    binary: 4,\n    float: 5,\n};\n//# sourceMappingURL=types.js.map","import { DataType } from '../ebml/types.js';\n/**\n * Elements of document type description\n * Derived from https://github.com/tungol/EBML/blob/master/doctypes/matroska.dtd\n * Extended with:\n * - https://www.matroska.org/technical/specs/index.html\n */\nexport const matroskaDtd = {\n    name: 'dtd',\n    container: {\n        0x1a45dfa3: {\n            name: 'ebml',\n            container: {\n                0x4286: { name: 'ebmlVersion', value: DataType.uint }, // 5.1.1\n                0x42f7: { name: 'ebmlReadVersion', value: DataType.uint }, // 5.1.2\n                0x42f2: { name: 'ebmlMaxIDWidth', value: DataType.uint }, // 5.1.3\n                0x42f3: { name: 'ebmlMaxSizeWidth', value: DataType.uint }, // 5.1.4\n                0x4282: { name: 'docType', value: DataType.string }, // 5.1.5\n                0x4287: { name: 'docTypeVersion', value: DataType.uint }, // 5.1.6\n                0x4285: { name: 'docTypeReadVersion', value: DataType.uint } // 5.1.7\n            }\n        },\n        // Matroska segments\n        0x18538067: {\n            name: 'segment',\n            container: {\n                // Meta Seek Information (also known as MetaSeek)\n                0x114d9b74: {\n                    name: 'seekHead',\n                    container: {\n                        0x4dbb: {\n                            name: 'seek',\n                            multiple: true,\n                            container: {\n                                0x53ab: { name: 'id', value: DataType.binary },\n                                0x53ac: { name: 'position', value: DataType.uint }\n                            }\n                        }\n                    }\n                },\n                // Segment Information\n                0x1549a966: {\n                    name: 'info',\n                    container: {\n                        0x73a4: { name: 'uid', value: DataType.uid },\n                        0x7384: { name: 'filename', value: DataType.string },\n                        0x3cb923: { name: 'prevUID', value: DataType.uid },\n                        0x3c83ab: { name: 'prevFilename', value: DataType.string },\n                        0x3eb923: { name: 'nextUID', value: DataType.uid },\n                        0x3e83bb: { name: 'nextFilename', value: DataType.string },\n                        0x2ad7b1: { name: 'timecodeScale', value: DataType.uint },\n                        0x4489: { name: 'duration', value: DataType.float },\n                        0x4461: { name: 'dateUTC', value: DataType.uint },\n                        0x7ba9: { name: 'title', value: DataType.string },\n                        0x4d80: { name: 'muxingApp', value: DataType.string },\n                        0x5741: { name: 'writingApp', value: DataType.string }\n                    }\n                },\n                // Cluster\n                0x1f43b675: {\n                    name: 'cluster',\n                    multiple: true,\n                    container: {\n                        0xe7: { name: 'timecode', value: DataType.uid },\n                        0x58d7: { name: 'silentTracks ', multiple: true },\n                        0xa7: { name: 'position', value: DataType.uid },\n                        0xab: { name: 'prevSize', value: DataType.uid },\n                        0xa0: { name: 'blockGroup' },\n                        0xa3: { name: 'simpleBlock' }\n                    }\n                },\n                // Track\n                0x1654ae6b: {\n                    name: 'tracks',\n                    container: {\n                        0xae: {\n                            name: 'entries',\n                            multiple: true,\n                            container: {\n                                0xd7: { name: 'trackNumber', value: DataType.uint },\n                                0x73c5: { name: 'uid', value: DataType.uid },\n                                0x83: { name: 'trackType', value: DataType.uint },\n                                0xb9: { name: 'flagEnabled', value: DataType.bool },\n                                0x88: { name: 'flagDefault', value: DataType.bool },\n                                0x55aa: { name: 'flagForced', value: DataType.bool }, // extended\n                                0x9c: { name: 'flagLacing', value: DataType.bool },\n                                0x6de7: { name: 'minCache', value: DataType.uint },\n                                0x6de8: { name: 'maxCache', value: DataType.uint },\n                                0x23e383: { name: 'defaultDuration', value: DataType.uint },\n                                0x23314f: { name: 'timecodeScale', value: DataType.float },\n                                0x536e: { name: 'name', value: DataType.string },\n                                0x22b59c: { name: 'language', value: DataType.string },\n                                0x86: { name: 'codecID', value: DataType.string },\n                                0x63a2: { name: 'codecPrivate', value: DataType.binary },\n                                0x258688: { name: 'codecName', value: DataType.string },\n                                0x3a9697: { name: 'codecSettings', value: DataType.string },\n                                0x3b4040: { name: 'codecInfoUrl', value: DataType.string },\n                                0x26b240: { name: 'codecDownloadUrl', value: DataType.string },\n                                0xaa: { name: 'codecDecodeAll', value: DataType.bool },\n                                0x6fab: { name: 'trackOverlay', value: DataType.uint },\n                                // Video\n                                0xe0: {\n                                    name: 'video',\n                                    container: {\n                                        0x9a: { name: 'flagInterlaced', value: DataType.bool },\n                                        0x53b8: { name: 'stereoMode', value: DataType.uint },\n                                        0xb0: { name: 'pixelWidth', value: DataType.uint },\n                                        0xba: { name: 'pixelHeight', value: DataType.uint },\n                                        0x54b0: { name: 'displayWidth', value: DataType.uint },\n                                        0x54ba: { name: 'displayHeight', value: DataType.uint },\n                                        0x54b3: { name: 'aspectRatioType', value: DataType.uint },\n                                        0x2eb524: { name: 'colourSpace', value: DataType.uint },\n                                        0x2fb523: { name: 'gammaValue', value: DataType.float }\n                                    }\n                                },\n                                // Audio\n                                0xe1: {\n                                    name: 'audio',\n                                    container: {\n                                        0xb5: { name: 'samplingFrequency', value: DataType.float },\n                                        0x78b5: { name: 'outputSamplingFrequency', value: DataType.float },\n                                        0x9f: { name: 'channels', value: DataType.uint }, // https://www.matroska.org/technical/specs/index.html\n                                        0x94: { name: 'channels', value: DataType.uint },\n                                        0x7d7b: { name: 'channelPositions', value: DataType.binary },\n                                        0x6264: { name: 'bitDepth', value: DataType.uint }\n                                    }\n                                },\n                                // Content Encoding\n                                0x6d80: {\n                                    name: 'contentEncodings',\n                                    container: {\n                                        0x6240: {\n                                            name: 'contentEncoding',\n                                            container: {\n                                                0x5031: { name: 'order', value: DataType.uint },\n                                                0x5032: { name: 'scope', value: DataType.bool },\n                                                0x5033: { name: 'type', value: DataType.uint },\n                                                0x5034: {\n                                                    name: 'contentEncoding',\n                                                    container: {\n                                                        0x4254: { name: 'contentCompAlgo', value: DataType.uint },\n                                                        0x4255: { name: 'contentCompSettings', value: DataType.binary }\n                                                    }\n                                                },\n                                                0x5035: {\n                                                    name: 'contentEncoding',\n                                                    container: {\n                                                        0x47e1: { name: 'contentEncAlgo', value: DataType.uint },\n                                                        0x47e2: { name: 'contentEncKeyID', value: DataType.binary },\n                                                        0x47e3: { name: 'contentSignature ', value: DataType.binary },\n                                                        0x47e4: { name: 'ContentSigKeyID  ', value: DataType.binary },\n                                                        0x47e5: { name: 'contentSigAlgo ', value: DataType.uint },\n                                                        0x47e6: { name: 'contentSigHashAlgo ', value: DataType.uint }\n                                                    }\n                                                },\n                                                0x6264: { name: 'bitDepth', value: DataType.uint }\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                },\n                // Cueing Data\n                0x1c53bb6b: {\n                    name: 'cues',\n                    container: {\n                        0xbb: {\n                            name: 'cuePoint',\n                            container: {\n                                0xb3: { name: 'cueTime', value: DataType.uid },\n                                0xb7: {\n                                    name: 'positions',\n                                    container: {\n                                        0xf7: { name: 'track', value: DataType.uint },\n                                        0xf1: { name: 'clusterPosition', value: DataType.uint },\n                                        0x5378: { name: 'blockNumber', value: DataType.uint },\n                                        0xea: { name: 'codecState', value: DataType.uint },\n                                        0xdb: {\n                                            name: 'reference', container: {\n                                                0x96: { name: 'time', value: DataType.uint },\n                                                0x97: { name: 'cluster', value: DataType.uint },\n                                                0x535f: { name: 'number', value: DataType.uint },\n                                                0xeb: { name: 'codecState', value: DataType.uint }\n                                            }\n                                        },\n                                        0xf0: { name: 'relativePosition', value: DataType.uint } // extended\n                                    }\n                                }\n                            }\n                        }\n                    }\n                },\n                // Attachment\n                0x1941a469: {\n                    name: 'attachments',\n                    container: {\n                        0x61a7: {\n                            name: 'attachedFiles',\n                            multiple: true,\n                            container: {\n                                0x467e: { name: 'description', value: DataType.string },\n                                0x466e: { name: 'name', value: DataType.string },\n                                0x4660: { name: 'mimeType', value: DataType.string },\n                                0x465c: { name: 'data', value: DataType.binary },\n                                0x46ae: { name: 'uid', value: DataType.uid }\n                            }\n                        }\n                    }\n                },\n                // Chapters\n                0x1043a770: {\n                    name: 'chapters',\n                    container: {\n                        0x45b9: {\n                            name: 'editionEntry',\n                            container: {\n                                0xb6: {\n                                    name: 'chapterAtom',\n                                    container: {\n                                        0x73c4: { name: 'uid', value: DataType.uid },\n                                        0x91: { name: 'timeStart', value: DataType.uint },\n                                        0x92: { name: 'timeEnd', value: DataType.uid },\n                                        0x98: { name: 'hidden', value: DataType.bool },\n                                        0x4598: { name: 'enabled', value: DataType.uid },\n                                        0x8f: {\n                                            name: 'track', container: {\n                                                0x89: { name: 'trackNumber', value: DataType.uid },\n                                                0x80: {\n                                                    name: 'display', container: {\n                                                        0x85: { name: 'string', value: DataType.string },\n                                                        0x437c: { name: 'language ', value: DataType.string },\n                                                        0x437e: { name: 'country ', value: DataType.string }\n                                                    }\n                                                }\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                },\n                // Tagging\n                0x1254c367: {\n                    name: 'tags',\n                    container: {\n                        0x7373: {\n                            name: 'tag',\n                            multiple: true,\n                            container: {\n                                0x63c0: {\n                                    name: 'target',\n                                    container: {\n                                        0x63c5: { name: 'tagTrackUID', value: DataType.uid },\n                                        0x63c4: { name: 'tagChapterUID', value: DataType.uint },\n                                        0x63c6: { name: 'tagAttachmentUID', value: DataType.uid },\n                                        0x63ca: { name: 'targetType', value: DataType.string }, // extended\n                                        0x68ca: { name: 'targetTypeValue', value: DataType.uint }, // extended\n                                        0x63c9: { name: 'tagEditionUID', value: DataType.uid } // extended\n                                    }\n                                },\n                                0x67c8: {\n                                    name: 'simpleTags',\n                                    multiple: true,\n                                    container: {\n                                        0x45a3: { name: 'name', value: DataType.string },\n                                        0x4487: { name: 'string', value: DataType.string },\n                                        0x4485: { name: 'binary', value: DataType.binary },\n                                        0x447a: { name: 'language', value: DataType.string }, // extended\n                                        0x447b: { name: 'languageIETF', value: DataType.string }, // extended\n                                        0x4484: { name: 'default', value: DataType.bool } // extended\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n};\n//# sourceMappingURL=MatroskaDtd.js.map","import { Float32_BE, Float64_BE, StringType, UINT8 } from 'token-types';\nimport initDebug from 'debug';\nimport { EndOfStreamError } from 'strtok3';\nimport { DataType } from './types.js';\nimport * as Token from 'token-types';\nimport { makeUnexpectedFileContentError } from '../ParseError.js';\nconst debug = initDebug('music-metadata:parser:ebml');\nexport class EbmlContentError extends makeUnexpectedFileContentError('EBML') {\n}\nexport const ParseAction = {\n    ReadNext: 0, // Continue reading the next elements\n    IgnoreElement: 2, // Ignore (do not read) this element\n    SkipSiblings: 3, // Skip all remaining elements at the same level\n    TerminateParsing: 4, // Terminate the parsing process\n    SkipElement: 5 // Consider the element has read, assume position is at the next element\n};\n/**\n * Extensible Binary Meta Language (EBML) iterator\n * https://en.wikipedia.org/wiki/Extensible_Binary_Meta_Language\n * http://matroska.sourceforge.net/technical/specs/rfc/index.html\n *\n * WEBM VP8 AUDIO FILE\n */\nexport class EbmlIterator {\n    /**\n     * @param {ITokenizer} tokenizer Input\n     * @param tokenizer\n     */\n    constructor(tokenizer) {\n        this.padding = 0;\n        this.parserMap = new Map();\n        this.ebmlMaxIDLength = 4;\n        this.ebmlMaxSizeLength = 8;\n        this.tokenizer = tokenizer;\n        this.parserMap.set(DataType.uint, e => this.readUint(e));\n        this.parserMap.set(DataType.string, e => this.readString(e));\n        this.parserMap.set(DataType.binary, e => this.readBuffer(e));\n        this.parserMap.set(DataType.uid, async (e) => this.readBuffer(e));\n        this.parserMap.set(DataType.bool, e => this.readFlag(e));\n        this.parserMap.set(DataType.float, e => this.readFloat(e));\n    }\n    async iterate(dtdElement, posDone, listener) {\n        return this.parseContainer(linkParents(dtdElement), posDone, listener);\n    }\n    async parseContainer(dtdElement, posDone, listener) {\n        const tree = {};\n        while (this.tokenizer.position < posDone) {\n            let element;\n            const elementPosition = this.tokenizer.position;\n            try {\n                element = await this.readElement();\n            }\n            catch (error) {\n                if (error instanceof EndOfStreamError) {\n                    break;\n                }\n                throw error;\n            }\n            const child = dtdElement.container[element.id];\n            if (child) {\n                const action = listener.startNext(child);\n                switch (action) {\n                    case ParseAction.ReadNext:\n                        {\n                            if (element.id === 0x1F43B675) {\n                                // Hack to ignore remaining segment, when cluster element received\n                                // await this.tokenizer.ignore(posDone - this.tokenizer.position);\n                                // break;\n                            }\n                            debug(`Read element: name=${getElementPath(child)}{id=0x${element.id.toString(16)}, container=${!!child.container}} at position=${elementPosition}`);\n                            if (child.container) {\n                                const res = await this.parseContainer(child, element.len >= 0 ? this.tokenizer.position + element.len : -1, listener);\n                                if (child.multiple) {\n                                    if (!tree[child.name]) {\n                                        tree[child.name] = [];\n                                    }\n                                    tree[child.name].push(res);\n                                }\n                                else {\n                                    tree[child.name] = res;\n                                }\n                                await listener.elementValue(child, res, elementPosition);\n                            }\n                            else {\n                                const parser = this.parserMap.get(child.value);\n                                if (typeof parser === 'function') {\n                                    const value = await parser(element);\n                                    tree[child.name] = value;\n                                    await listener.elementValue(child, value, elementPosition);\n                                }\n                            }\n                        }\n                        break;\n                    case ParseAction.SkipElement:\n                        debug(`Go to next element: name=${getElementPath(child)}, element.id=0x${element.id}, container=${!!child.container} at position=${elementPosition}`);\n                        break;\n                    case ParseAction.IgnoreElement:\n                        debug(`Ignore element: name=${getElementPath(child)}, element.id=0x${element.id}, container=${!!child.container} at position=${elementPosition}`);\n                        await this.tokenizer.ignore(element.len);\n                        break;\n                    case ParseAction.SkipSiblings:\n                        debug(`Ignore remaining container, at: name=${getElementPath(child)}, element.id=0x${element.id}, container=${!!child.container} at position=${elementPosition}`);\n                        await this.tokenizer.ignore(posDone - this.tokenizer.position);\n                        break;\n                    case ParseAction.TerminateParsing:\n                        debug(`Terminate parsing at element: name=${getElementPath(child)}, element.id=0x${element.id}, container=${!!child.container} at position=${elementPosition}`);\n                        return tree;\n                }\n            }\n            else {\n                switch (element.id) {\n                    case 0xec: // void\n                        this.padding += element.len;\n                        await this.tokenizer.ignore(element.len);\n                        break;\n                    default:\n                        debug(`parseEbml: parent=${getElementPath(dtdElement)}, unknown child: id=${element.id.toString(16)} at position=${elementPosition}`);\n                        this.padding += element.len;\n                        await this.tokenizer.ignore(element.len);\n                }\n            }\n        }\n        return tree;\n    }\n    async readVintData(maxLength) {\n        const msb = await this.tokenizer.peekNumber(UINT8);\n        let mask = 0x80;\n        let oc = 1;\n        // Calculate VINT_WIDTH\n        while ((msb & mask) === 0) {\n            if (oc > maxLength) {\n                throw new EbmlContentError('VINT value exceeding maximum size');\n            }\n            ++oc;\n            mask >>= 1;\n        }\n        const id = new Uint8Array(oc);\n        await this.tokenizer.readBuffer(id);\n        return id;\n    }\n    async readElement() {\n        const id = await this.readVintData(this.ebmlMaxIDLength);\n        const lenField = await this.readVintData(this.ebmlMaxSizeLength);\n        lenField[0] ^= 0x80 >> (lenField.length - 1);\n        return {\n            id: readUIntBE(id, id.length),\n            len: readUIntBE(lenField, lenField.length)\n        };\n    }\n    async readFloat(e) {\n        switch (e.len) {\n            case 0:\n                return 0.0;\n            case 4:\n                return this.tokenizer.readNumber(Float32_BE);\n            case 8:\n                return this.tokenizer.readNumber(Float64_BE);\n            case 10:\n                return this.tokenizer.readNumber(Float64_BE);\n            default:\n                throw new EbmlContentError(`Invalid IEEE-754 float length: ${e.len}`);\n        }\n    }\n    async readFlag(e) {\n        return (await this.readUint(e)) === 1;\n    }\n    async readUint(e) {\n        const buf = await this.readBuffer(e);\n        return readUIntBE(buf, e.len);\n    }\n    async readString(e) {\n        const rawString = await this.tokenizer.readToken(new StringType(e.len, 'utf-8'));\n        return rawString.replace(/\\x00.*$/g, '');\n    }\n    async readBuffer(e) {\n        const buf = new Uint8Array(e.len);\n        await this.tokenizer.readBuffer(buf);\n        return buf;\n    }\n}\nfunction readUIntBE(buf, len) {\n    return Number(readUIntBeAsBigInt(buf, len));\n}\n/**\n * Reeds an unsigned integer from a big endian buffer of length `len`\n * @param buf Buffer to decode from\n * @param len Number of bytes\n * @private\n */\nfunction readUIntBeAsBigInt(buf, len) {\n    const normalizedNumber = new Uint8Array(8);\n    const cleanNumber = buf.subarray(0, len);\n    try {\n        normalizedNumber.set(cleanNumber, 8 - len);\n        return Token.UINT64_BE.get(normalizedNumber, 0);\n    }\n    catch (_error) {\n        return BigInt(-1);\n    }\n}\nfunction linkParents(element) {\n    if (element.container) {\n        Object.keys(element.container)\n            .map(id => {\n            const child = element.container[id];\n            child.id = Number.parseInt(id);\n            return child;\n        }).forEach(child => {\n            child.parent = element;\n            linkParents(child);\n        });\n    }\n    return element;\n}\nexport function getElementPath(element) {\n    let path = '';\n    if (element.parent && element.parent.name !== 'dtd') {\n        path += `${getElementPath(element.parent)}/`;\n    }\n    return path + element.name;\n}\n//# sourceMappingURL=EbmlIterator.js.map","import initDebug from 'debug';\nimport { BasicParser } from '../common/BasicParser.js';\nimport { matroskaDtd } from './MatroskaDtd.js';\nimport { TargetType, TrackType } from './types.js';\nimport { EbmlIterator, ParseAction } from '../ebml/EbmlIterator.js';\nconst debug = initDebug('music-metadata:parser:matroska');\n/**\n * Extensible Binary Meta Language (EBML) parser\n * https://en.wikipedia.org/wiki/Extensible_Binary_Meta_Language\n * http://matroska.sourceforge.net/technical/specs/rfc/index.html\n *\n * WEBM VP8 AUDIO FILE\n */\nexport class MatroskaParser extends BasicParser {\n    constructor() {\n        super(...arguments);\n        this.seekHeadOffset = 0;\n        /**\n         * Use index to skip multiple segment/cluster elements at once.\n         * Significant performance impact\n         */\n        this.flagUseIndexToSkipClusters = this.options.mkvUseIndex ?? false;\n    }\n    async parse() {\n        const containerSize = this.tokenizer.fileInfo.size ?? Number.MAX_SAFE_INTEGER;\n        const matroskaIterator = new EbmlIterator(this.tokenizer);\n        debug('Initializing DTD end MatroskaIterator');\n        await matroskaIterator.iterate(matroskaDtd, containerSize, {\n            startNext: (element) => {\n                switch (element.id) {\n                    // case 0x1f43b675: // cluster\n                    case 0x1c53bb6b: // Cueing Data\n                        debug(`Skip element: name=${element.name}, id=0x${element.id.toString(16)}`);\n                        return ParseAction.IgnoreElement;\n                    case 0x1f43b675: // cluster\n                        if (this.flagUseIndexToSkipClusters && this.seekHead) {\n                            const index = this.seekHead.seek.find(index => index.position + this.seekHeadOffset > this.tokenizer.position);\n                            if (index) {\n                                // Go to next index position\n                                const ignoreSize = index.position + this.seekHeadOffset - this.tokenizer.position;\n                                debug(`Use index to go to next position, ignoring ${ignoreSize} bytes`);\n                                this.tokenizer.ignore(ignoreSize);\n                                return ParseAction.SkipElement;\n                            }\n                        }\n                        return ParseAction.IgnoreElement;\n                    default:\n                        return ParseAction.ReadNext;\n                }\n            },\n            elementValue: async (element, value, offset) => {\n                debug(`Received: name=${element.name}, value=${value}`);\n                switch (element.id) {\n                    case 0x4282: // docType\n                        this.metadata.setFormat('container', `EBML/${value}`);\n                        break;\n                    case 0x114d9b74:\n                        this.seekHead = value;\n                        this.seekHeadOffset = offset;\n                        break;\n                    case 0x1549a966:\n                        { // Info (Segment Information)\n                            const info = value;\n                            const timecodeScale = info.timecodeScale ? info.timecodeScale : 1000000;\n                            if (typeof info.duration === 'number') {\n                                const duration = info.duration * timecodeScale / 1000000000;\n                                await this.addTag('segment:title', info.title);\n                                this.metadata.setFormat('duration', Number(duration));\n                            }\n                        }\n                        break;\n                    case 0x1654ae6b:\n                        { // tracks\n                            const audioTracks = value;\n                            if (audioTracks?.entries) {\n                                audioTracks.entries.forEach(entry => {\n                                    const stream = {\n                                        codecName: entry.codecID.replace('A_', '').replace('V_', ''),\n                                        codecSettings: entry.codecSettings,\n                                        flagDefault: entry.flagDefault,\n                                        flagLacing: entry.flagLacing,\n                                        flagEnabled: entry.flagEnabled,\n                                        language: entry.language,\n                                        name: entry.name,\n                                        type: entry.trackType,\n                                        audio: entry.audio,\n                                        video: entry.video\n                                    };\n                                    this.metadata.addStreamInfo(stream);\n                                });\n                                const audioTrack = audioTracks.entries\n                                    .filter(entry => entry.trackType === TrackType.audio)\n                                    .reduce((acc, cur) => {\n                                    if (!acc)\n                                        return cur;\n                                    if (cur.flagDefault && !acc.flagDefault)\n                                        return cur;\n                                    if (cur.trackNumber < acc.trackNumber)\n                                        return cur;\n                                    return acc;\n                                }, null);\n                                if (audioTrack) {\n                                    this.metadata.setFormat('codec', audioTrack.codecID.replace('A_', ''));\n                                    this.metadata.setFormat('sampleRate', audioTrack.audio.samplingFrequency);\n                                    this.metadata.setFormat('numberOfChannels', audioTrack.audio.channels);\n                                }\n                            }\n                        }\n                        break;\n                    case 0x1254c367:\n                        { // tags\n                            const tags = value;\n                            await Promise.all(tags.tag.map(async (tag) => {\n                                const target = tag.target;\n                                const targetType = target?.targetTypeValue ? TargetType[target.targetTypeValue] : (target?.targetType ? target.targetType : 'track');\n                                await Promise.all(tag.simpleTags.map(async (simpleTag) => {\n                                    const value = simpleTag.string ? simpleTag.string : simpleTag.binary;\n                                    await this.addTag(`${targetType}:${simpleTag.name}`, value);\n                                }));\n                            }));\n                        }\n                        break;\n                    case 0x1941a469:\n                        { // attachments\n                            const attachments = value;\n                            await Promise.all(attachments.attachedFiles\n                                .filter(file => file.mimeType.startsWith('image/'))\n                                .map(file => this.addTag('picture', {\n                                data: file.data,\n                                format: file.mimeType,\n                                description: file.description,\n                                name: file.name\n                            })));\n                        }\n                        break;\n                }\n            }\n        });\n    }\n    async addTag(tagId, value) {\n        await this.metadata.addTag('matroska', tagId, value);\n    }\n}\n//# sourceMappingURL=MatroskaParser.js.map","import * as Token from 'token-types';\nimport initDebug from 'debug';\nimport { FourCcToken } from '../common/FourCC.js';\nimport { makeUnexpectedFileContentError } from '../ParseError.js';\nimport * as util from '../common/Util.js';\nconst debug = initDebug('music-metadata:parser:MP4:atom');\nexport class Mp4ContentError extends makeUnexpectedFileContentError('MP4') {\n}\nexport const Header = {\n    len: 8,\n    get: (buf, off) => {\n        const length = Token.UINT32_BE.get(buf, off);\n        if (length < 0)\n            throw new Mp4ContentError('Invalid atom header length');\n        return {\n            length: BigInt(length),\n            name: new Token.StringType(4, 'latin1').get(buf, off + 4)\n        };\n    },\n    put: (buf, off, hdr) => {\n        Token.UINT32_BE.put(buf, off, Number(hdr.length));\n        return FourCcToken.put(buf, off + 4, hdr.name);\n    }\n};\n/**\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap1/qtff1.html#//apple_ref/doc/uid/TP40000939-CH203-38190\n */\nexport const ExtendedSize = Token.UINT64_BE;\nexport const ftyp = {\n    len: 4,\n    get: (buf, off) => {\n        return {\n            type: new Token.StringType(4, 'ascii').get(buf, off)\n        };\n    }\n};\n/**\n * Token: Movie Header Atom\n */\nexport const mhdr = {\n    len: 8,\n    get: (buf, off) => {\n        return {\n            version: Token.UINT8.get(buf, off),\n            flags: Token.UINT24_BE.get(buf, off + 1),\n            nextItemID: Token.UINT32_BE.get(buf, off + 4)\n        };\n    }\n};\n/**\n * Base class for 'fixed' length atoms.\n * In some cases these atoms are longer then the sum of the described fields.\n * Issue: https://github.com/Borewit/music-metadata/issues/120\n */\nexport class FixedLengthAtom {\n    /**\n     *\n     * @param {number} len Length as specified in the size field\n     * @param {number} expLen Total length of sum of specified fields in the standard\n     * @param atomId Atom ID\n     */\n    constructor(len, expLen, atomId) {\n        if (len < expLen) {\n            throw new Mp4ContentError(`Atom ${atomId} expected to be ${expLen}, but specifies ${len} bytes long.`);\n        }\n        if (len > expLen) {\n            debug(`Warning: atom ${atomId} expected to be ${expLen}, but was actually ${len} bytes long.`);\n        }\n        this.len = len;\n    }\n}\n/**\n * Timestamp stored in seconds since Mac Epoch (1 January 1904)\n */\nconst SecondsSinceMacEpoch = {\n    len: 4,\n    get: (buf, off) => {\n        const secondsSinceUnixEpoch = Token.UINT32_BE.get(buf, off) - 2082844800;\n        return new Date(secondsSinceUnixEpoch * 1000);\n    }\n};\n/**\n * Token: Media Header Atom\n * Ref:\n * - https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-SW34\n * - https://wiki.multimedia.cx/index.php/QuickTime_container#mdhd\n */\nexport class MdhdAtom extends FixedLengthAtom {\n    constructor(len) {\n        super(len, 24, 'mdhd');\n    }\n    get(buf, off) {\n        return {\n            version: Token.UINT8.get(buf, off + 0),\n            flags: Token.UINT24_BE.get(buf, off + 1),\n            creationTime: SecondsSinceMacEpoch.get(buf, off + 4),\n            modificationTime: SecondsSinceMacEpoch.get(buf, off + 8),\n            timeScale: Token.UINT32_BE.get(buf, off + 12),\n            duration: Token.UINT32_BE.get(buf, off + 16),\n            language: Token.UINT16_BE.get(buf, off + 20),\n            quality: Token.UINT16_BE.get(buf, off + 22)\n        };\n    }\n}\n/**\n * Token: Movie Header Atom\n */\nexport class MvhdAtom extends FixedLengthAtom {\n    constructor(len) {\n        super(len, 100, 'mvhd');\n    }\n    get(buf, off) {\n        return {\n            version: Token.UINT8.get(buf, off),\n            flags: Token.UINT24_BE.get(buf, off + 1),\n            creationTime: SecondsSinceMacEpoch.get(buf, off + 4),\n            modificationTime: SecondsSinceMacEpoch.get(buf, off + 8),\n            timeScale: Token.UINT32_BE.get(buf, off + 12),\n            duration: Token.UINT32_BE.get(buf, off + 16),\n            preferredRate: Token.UINT32_BE.get(buf, off + 20),\n            preferredVolume: Token.UINT16_BE.get(buf, off + 24),\n            // ignore reserver: 10 bytes\n            // ignore matrix structure: 36 bytes\n            previewTime: Token.UINT32_BE.get(buf, off + 72),\n            previewDuration: Token.UINT32_BE.get(buf, off + 76),\n            posterTime: Token.UINT32_BE.get(buf, off + 80),\n            selectionTime: Token.UINT32_BE.get(buf, off + 84),\n            selectionDuration: Token.UINT32_BE.get(buf, off + 88),\n            currentTime: Token.UINT32_BE.get(buf, off + 92),\n            nextTrackID: Token.UINT32_BE.get(buf, off + 96)\n        };\n    }\n}\n/**\n * Data Atom Structure\n */\nexport class DataAtom {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        return {\n            type: {\n                set: Token.UINT8.get(buf, off + 0),\n                type: Token.UINT24_BE.get(buf, off + 1)\n            },\n            locale: Token.UINT24_BE.get(buf, off + 4),\n            value: new Token.Uint8ArrayType(this.len - 8).get(buf, off + 8)\n        };\n    }\n}\n/**\n * Data Atom Structure\n * Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW31\n */\nexport class NameAtom {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        return {\n            version: Token.UINT8.get(buf, off),\n            flags: Token.UINT24_BE.get(buf, off + 1),\n            name: new Token.StringType(this.len - 4, 'utf-8').get(buf, off + 4)\n        };\n    }\n}\n/**\n * Track Header Atoms structure (`tkhd`)\n * Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25550\n */\nexport class TrackHeaderAtom {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        return {\n            version: Token.UINT8.get(buf, off),\n            flags: Token.UINT24_BE.get(buf, off + 1),\n            creationTime: SecondsSinceMacEpoch.get(buf, off + 4),\n            modificationTime: SecondsSinceMacEpoch.get(buf, off + 8),\n            trackId: Token.UINT32_BE.get(buf, off + 12),\n            // reserved 4 bytes\n            duration: Token.UINT32_BE.get(buf, off + 20),\n            layer: Token.UINT16_BE.get(buf, off + 24),\n            alternateGroup: Token.UINT16_BE.get(buf, off + 26),\n            volume: Token.UINT16_BE.get(buf, off + 28) // ToDo: fixed point\n            // ToDo: add remaining fields\n        };\n    }\n}\n/**\n * Atom: Sample Description Atom ('stsd')\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25691\n */\nconst stsdHeader = {\n    len: 8,\n    get: (buf, off) => {\n        return {\n            version: Token.UINT8.get(buf, off),\n            flags: Token.UINT24_BE.get(buf, off + 1),\n            numberOfEntries: Token.UINT32_BE.get(buf, off + 4)\n        };\n    }\n};\n/**\n * Atom: Sample Description Atom ('stsd')\n * Ref: https://developer.apple.com/documentation/quicktime-file-format/sample_description_atom\n */\nclass SampleDescriptionTable {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        const descrLen = this.len - 12;\n        return {\n            dataFormat: FourCcToken.get(buf, off),\n            dataReferenceIndex: Token.UINT16_BE.get(buf, off + 10),\n            description: descrLen > 0 ? new Token.Uint8ArrayType(descrLen).get(buf, off + 12) : undefined\n        };\n    }\n}\n/**\n * Atom: Sample-description Atom ('stsd')\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25691\n */\nexport class StsdAtom {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        const header = stsdHeader.get(buf, off);\n        off += stsdHeader.len;\n        const table = [];\n        for (let n = 0; n < header.numberOfEntries; ++n) {\n            const size = Token.UINT32_BE.get(buf, off); // Sample description size\n            off += Token.UINT32_BE.len;\n            table.push(new SampleDescriptionTable(size - Token.UINT32_BE.len).get(buf, off));\n            off += size;\n        }\n        return {\n            header,\n            table\n        };\n    }\n}\n/**\n * Common Sound Sample Description (version & revision)\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-57317\n */\nexport const SoundSampleDescriptionVersion = {\n    len: 8,\n    get(buf, off) {\n        return {\n            version: Token.INT16_BE.get(buf, off),\n            revision: Token.INT16_BE.get(buf, off + 2),\n            vendor: Token.INT32_BE.get(buf, off + 4)\n        };\n    }\n};\n/**\n * Sound Sample Description (Version 0)\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-130736\n */\nexport const SoundSampleDescriptionV0 = {\n    len: 12,\n    get(buf, off) {\n        return {\n            numAudioChannels: Token.INT16_BE.get(buf, off + 0),\n            sampleSize: Token.INT16_BE.get(buf, off + 2),\n            compressionId: Token.INT16_BE.get(buf, off + 4),\n            packetSize: Token.INT16_BE.get(buf, off + 6),\n            sampleRate: Token.UINT16_BE.get(buf, off + 8) + Token.UINT16_BE.get(buf, off + 10) / 10000\n        };\n    }\n};\nclass SimpleTableAtom {\n    constructor(len, token) {\n        this.len = len;\n        this.token = token;\n    }\n    get(buf, off) {\n        const nrOfEntries = Token.INT32_BE.get(buf, off + 4);\n        return {\n            version: Token.INT8.get(buf, off + 0),\n            flags: Token.INT24_BE.get(buf, off + 1),\n            numberOfEntries: nrOfEntries,\n            entries: readTokenTable(buf, this.token, off + 8, this.len - 8, nrOfEntries)\n        };\n    }\n}\nexport const TimeToSampleToken = {\n    len: 8,\n    get(buf, off) {\n        return {\n            count: Token.INT32_BE.get(buf, off + 0),\n            duration: Token.INT32_BE.get(buf, off + 4)\n        };\n    }\n};\n/**\n * Time-to-sample('stts') atom.\n * Store duration information for a media’s samples.\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25696\n */\nexport class SttsAtom extends SimpleTableAtom {\n    constructor(len) {\n        super(len, TimeToSampleToken);\n    }\n}\nexport const SampleToChunkToken = {\n    len: 12,\n    get(buf, off) {\n        return {\n            firstChunk: Token.INT32_BE.get(buf, off),\n            samplesPerChunk: Token.INT32_BE.get(buf, off + 4),\n            sampleDescriptionId: Token.INT32_BE.get(buf, off + 8)\n        };\n    }\n};\n/**\n * Sample-to-Chunk ('stsc') atom interface\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25706\n */\nexport class StscAtom extends SimpleTableAtom {\n    constructor(len) {\n        super(len, SampleToChunkToken);\n    }\n}\n/**\n * Sample-size ('stsz') atom\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25710\n */\nexport class StszAtom {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        const nrOfEntries = Token.INT32_BE.get(buf, off + 8);\n        return {\n            version: Token.INT8.get(buf, off),\n            flags: Token.INT24_BE.get(buf, off + 1),\n            sampleSize: Token.INT32_BE.get(buf, off + 4),\n            numberOfEntries: nrOfEntries,\n            entries: readTokenTable(buf, Token.INT32_BE, off + 12, this.len - 12, nrOfEntries)\n        };\n    }\n}\n/**\n * Chunk offset atom, 'stco'\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25715\n */\nexport class StcoAtom extends SimpleTableAtom {\n    constructor(len) {\n        super(len, Token.INT32_BE);\n        this.len = len;\n    }\n}\n/**\n * Token used to decode text-track from 'mdat' atom (raw data stream)\n */\nexport class ChapterText {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        const titleLen = Token.INT16_BE.get(buf, off + 0);\n        const str = new Token.StringType(titleLen, 'utf-8');\n        return str.get(buf, off + 2);\n    }\n}\nfunction readTokenTable(buf, token, off, remainingLen, numberOfEntries) {\n    debug(`remainingLen=${remainingLen}, numberOfEntries=${numberOfEntries} * token-len=${token.len}`);\n    if (remainingLen === 0)\n        return [];\n    if (remainingLen !== numberOfEntries * token.len)\n        throw new Mp4ContentError('mismatch number-of-entries with remaining atom-length');\n    const entries = [];\n    // parse offset-table\n    for (let n = 0; n < numberOfEntries; ++n) {\n        entries.push(token.get(buf, off));\n        off += token.len;\n    }\n    return entries;\n}\n/**\n * Sample-size ('tfhd') TrackFragmentHeaderBox\n */\nexport class TrackFragmentHeaderBox {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        const flagOffset = off + 1;\n        const header = {\n            version: Token.INT8.get(buf, off),\n            flags: {\n                baseDataOffsetPresent: util.getBit(buf, flagOffset + 2, 0),\n                sampleDescriptionIndexPresent: util.getBit(buf, flagOffset + 2, 1),\n                defaultSampleDurationPresent: util.getBit(buf, flagOffset + 2, 3),\n                defaultSampleSizePresent: util.getBit(buf, flagOffset + 2, 4),\n                defaultSampleFlagsPresent: util.getBit(buf, flagOffset + 2, 5),\n                defaultDurationIsEmpty: util.getBit(buf, flagOffset, 0),\n                defaultBaseIsMoof: util.getBit(buf, flagOffset, 1)\n            },\n            trackId: Token.UINT32_BE.get(buf, 4)\n        };\n        let dynOffset = 8;\n        if (header.flags.baseDataOffsetPresent) {\n            header.baseDataOffset = Token.UINT64_BE.get(buf, dynOffset);\n            dynOffset += 8;\n        }\n        if (header.flags.sampleDescriptionIndexPresent) {\n            header.sampleDescriptionIndex = Token.UINT32_BE.get(buf, dynOffset);\n            dynOffset += 4;\n        }\n        if (header.flags.defaultSampleDurationPresent) {\n            header.defaultSampleDuration = Token.UINT32_BE.get(buf, dynOffset);\n            dynOffset += 4;\n        }\n        if (header.flags.defaultSampleSizePresent) {\n            header.defaultSampleSize = Token.UINT32_BE.get(buf, dynOffset);\n            dynOffset += 4;\n        }\n        if (header.flags.defaultSampleFlagsPresent) {\n            header.defaultSampleFlags = Token.UINT32_BE.get(buf, dynOffset);\n        }\n        return header;\n    }\n}\n/**\n * Sample-size ('trun') TrackRunBox\n */\nexport class TrackRunBox {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        const flagOffset = off + 1;\n        const trun = {\n            version: Token.INT8.get(buf, off),\n            flags: {\n                dataOffsetPresent: util.getBit(buf, flagOffset + 2, 0),\n                firstSampleFlagsPresent: util.getBit(buf, flagOffset + 2, 2),\n                sampleDurationPresent: util.getBit(buf, flagOffset + 1, 0),\n                sampleSizePresent: util.getBit(buf, flagOffset + 1, 1),\n                sampleFlagsPresent: util.getBit(buf, flagOffset + 1, 2),\n                sampleCompositionTimeOffsetsPresent: util.getBit(buf, flagOffset + 1, 3)\n            },\n            sampleCount: Token.UINT32_BE.get(buf, off + 4),\n            samples: []\n        };\n        let dynOffset = off + 8;\n        if (trun.flags.dataOffsetPresent) {\n            trun.dataOffset = Token.UINT32_BE.get(buf, dynOffset);\n            dynOffset += 4;\n        }\n        if (trun.flags.firstSampleFlagsPresent) {\n            trun.firstSampleFlags = Token.UINT32_BE.get(buf, dynOffset);\n            dynOffset += 4;\n        }\n        for (let n = 0; n < trun.sampleCount; ++n) {\n            if (dynOffset >= this.len) {\n                debug(\"TrackRunBox size mismatch\");\n                break;\n            }\n            const sample = {};\n            if (trun.flags.sampleDurationPresent) {\n                sample.sampleDuration = Token.UINT32_BE.get(buf, dynOffset);\n                dynOffset += 4;\n            }\n            if (trun.flags.sampleSizePresent) {\n                sample.sampleSize = Token.UINT32_BE.get(buf, dynOffset);\n                dynOffset += 4;\n            }\n            if (trun.flags.sampleFlagsPresent) {\n                sample.sampleFlags = Token.UINT32_BE.get(buf, dynOffset);\n                dynOffset += 4;\n            }\n            if (trun.flags.sampleCompositionTimeOffsetsPresent) {\n                sample.sampleCompositionTimeOffset = Token.UINT32_BE.get(buf, dynOffset);\n                dynOffset += 4;\n            }\n            trun.samples.push(sample);\n        }\n        return trun;\n    }\n}\n/**\n * HandlerBox (`hdlr`)\n */\nexport class HandlerBox {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        const _flagOffset = off + 1;\n        const charTypeToken = new Token.StringType(4, 'utf-8');\n        return {\n            version: Token.INT8.get(buf, off),\n            flags: Token.UINT24_BE.get(buf, off + 1),\n            componentType: charTypeToken.get(buf, off + 4),\n            handlerType: charTypeToken.get(buf, off + 8),\n            componentName: new Token.StringType(this.len - 28, 'utf-8').get(buf, off + 28),\n        };\n    }\n}\n/**\n * Chapter Track Reference Box (`chap`)\n */\nexport class ChapterTrackReferenceBox {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        let dynOffset = 0;\n        const trackIds = [];\n        while (dynOffset < this.len) {\n            trackIds.push(Token.UINT32_BE.get(buf, off + dynOffset));\n            dynOffset += 4;\n        }\n        return trackIds;\n    }\n}\n//# sourceMappingURL=AtomToken.js.map","import initDebug from 'debug';\nimport * as AtomToken from './AtomToken.js';\nimport { Header } from './AtomToken.js';\nconst debug = initDebug('music-metadata:parser:MP4:Atom');\nexport class Atom {\n    static async readAtom(tokenizer, dataHandler, parent, remaining) {\n        // Parse atom header\n        const offset = tokenizer.position;\n        debug(`Reading next token on offset=${offset}...`); //  buf.toString('ascii')\n        const header = await tokenizer.readToken(AtomToken.Header);\n        const extended = header.length === 1n;\n        if (extended) {\n            header.length = await tokenizer.readToken(AtomToken.ExtendedSize);\n        }\n        const atomBean = new Atom(header, extended, parent);\n        const payloadLength = atomBean.getPayloadLength(remaining);\n        debug(`parse atom name=${atomBean.atomPath}, extended=${atomBean.extended}, offset=${offset}, len=${atomBean.header.length}`); //  buf.toString('ascii')\n        await atomBean.readData(tokenizer, dataHandler, payloadLength);\n        return atomBean;\n    }\n    constructor(header, extended, parent) {\n        this.header = header;\n        this.extended = extended;\n        this.parent = parent;\n        this.children = [];\n        this.atomPath = (this.parent ? `${this.parent.atomPath}.` : '') + this.header.name;\n    }\n    getHeaderLength() {\n        return this.extended ? 16 : 8;\n    }\n    getPayloadLength(remaining) {\n        return (this.header.length === 0n ? remaining : Number(this.header.length)) - this.getHeaderLength();\n    }\n    async readAtoms(tokenizer, dataHandler, size) {\n        while (size > 0) {\n            const atomBean = await Atom.readAtom(tokenizer, dataHandler, this, size);\n            this.children.push(atomBean);\n            size -= atomBean.header.length === 0n ? size : Number(atomBean.header.length);\n        }\n    }\n    async readData(tokenizer, dataHandler, remaining) {\n        switch (this.header.name) {\n            // \"Container\" atoms, contains nested atoms\n            case 'moov': // The Movie Atom: contains other atoms\n            case 'udta': // User defined atom\n            case 'mdia': // Media atom\n            case 'minf': // Media Information Atom\n            case 'stbl': // The Sample Table Atom\n            case '<id>':\n            case 'ilst':\n            case 'tref':\n            case 'moof':\n                return this.readAtoms(tokenizer, dataHandler, this.getPayloadLength(remaining));\n            case 'meta': { // Metadata Atom, ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW8\n                // meta has 4 bytes of padding, ignore\n                const peekHeader = await tokenizer.peekToken(Header);\n                const paddingLength = peekHeader.name === 'hdlr' ? 0 : 4;\n                await tokenizer.ignore(paddingLength);\n                return this.readAtoms(tokenizer, dataHandler, this.getPayloadLength(remaining) - paddingLength);\n            }\n            default:\n                return dataHandler(this, remaining);\n        }\n    }\n}\n//# sourceMappingURL=Atom.js.map","import initDebug from 'debug';\nimport * as Token from 'token-types';\nimport { BasicParser } from '../common/BasicParser.js';\nimport { Genres } from '../id3v1/ID3v1Parser.js';\nimport { Atom } from './Atom.js';\nimport * as AtomToken from './AtomToken.js';\nimport { ChapterTrackReferenceBox, Mp4ContentError, } from './AtomToken.js';\nimport { TrackType } from '../type.js';\nimport { uint8ArrayToHex, uint8ArrayToString } from 'uint8array-extras';\nconst debug = initDebug('music-metadata:parser:MP4');\nconst tagFormat = 'iTunes';\nconst encoderDict = {\n    raw: {\n        lossy: false,\n        format: 'raw'\n    },\n    MAC3: {\n        lossy: true,\n        format: 'MACE 3:1'\n    },\n    MAC6: {\n        lossy: true,\n        format: 'MACE 6:1'\n    },\n    ima4: {\n        lossy: true,\n        format: 'IMA 4:1'\n    },\n    ulaw: {\n        lossy: true,\n        format: 'uLaw 2:1'\n    },\n    alaw: {\n        lossy: true,\n        format: 'uLaw 2:1'\n    },\n    Qclp: {\n        lossy: true,\n        format: 'QUALCOMM PureVoice'\n    },\n    '.mp3': {\n        lossy: true,\n        format: 'MPEG-1 layer 3'\n    },\n    alac: {\n        lossy: false,\n        format: 'ALAC'\n    },\n    'ac-3': {\n        lossy: true,\n        format: 'AC-3'\n    },\n    mp4a: {\n        lossy: true,\n        format: 'MPEG-4/AAC'\n    },\n    mp4s: {\n        lossy: true,\n        format: 'MP4S'\n    },\n    // Closed Captioning Media, https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-SW87\n    c608: {\n        lossy: true,\n        format: 'CEA-608'\n    },\n    c708: {\n        lossy: true,\n        format: 'CEA-708'\n    }\n};\nfunction distinct(value, index, self) {\n    return self.indexOf(value) === index;\n}\n/*\n * Parser for the MP4 (MPEG-4 Part 14) container format\n * Standard: ISO/IEC 14496-14\n * supporting:\n * - QuickTime container\n * - MP4 File Format\n * - 3GPP file format\n * - 3GPP2 file format\n *\n * MPEG-4 Audio / Part 3 (.m4a)& MPEG 4 Video (m4v, mp4) extension.\n * Support for Apple iTunes tags as found in a M4A/M4V files.\n * Ref:\n *   https://en.wikipedia.org/wiki/ISO_base_media_file_format\n *   https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/Metadata/Metadata.html\n *   http://atomicparsley.sourceforge.net/mpeg-4files.html\n *   https://github.com/sergiomb2/libmp4v2/wiki/iTunesMetadata\n *   https://wiki.multimedia.cx/index.php/QuickTime_container\n */\nexport class MP4Parser extends BasicParser {\n    constructor() {\n        super(...arguments);\n        this.tracks = new Map();\n        this.hasVideoTrack = false;\n        this.hasAudioTrack = true;\n        this.atomParsers = {\n            /**\n             * Parse movie header (mvhd) atom\n             * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-56313\n             */\n            mvhd: async (len) => {\n                const mvhd = await this.tokenizer.readToken(new AtomToken.MvhdAtom(len));\n                this.metadata.setFormat('creationTime', mvhd.creationTime);\n                this.metadata.setFormat('modificationTime', mvhd.modificationTime);\n            },\n            chap: async (len) => {\n                const td = this.getTrackDescription();\n                const trackIds = [];\n                while (len >= Token.UINT32_BE.len) {\n                    trackIds.push(await this.tokenizer.readNumber(Token.UINT32_BE));\n                    len -= Token.UINT32_BE.len;\n                }\n                td.chapterList = trackIds;\n            },\n            /**\n             * Parse mdat atom.\n             * Will scan for chapters\n             */\n            mdat: async (len) => {\n                this.audioLengthInBytes = len;\n                this.calculateBitRate();\n                if (this.options.includeChapters) {\n                    const trackWithChapters = [...this.tracks.values()].filter(track => track.chapterList);\n                    if (trackWithChapters.length === 1) {\n                        const chapterTrackIds = trackWithChapters[0].chapterList;\n                        const chapterTracks = [...this.tracks.values()].filter(track => chapterTrackIds.indexOf(track.header.trackId) !== -1);\n                        if (chapterTracks.length === 1) {\n                            return this.parseChapterTrack(chapterTracks[0], trackWithChapters[0], len);\n                        }\n                    }\n                }\n                await this.tokenizer.ignore(len);\n            },\n            ftyp: async (len) => {\n                const types = [];\n                while (len > 0) {\n                    const ftype = await this.tokenizer.readToken(AtomToken.ftyp);\n                    len -= AtomToken.ftyp.len;\n                    const value = ftype.type.replace(/\\W/g, '');\n                    if (value.length > 0) {\n                        types.push(value); // unshift for backward compatibility\n                    }\n                }\n                debug(`ftyp: ${types.join('/')}`);\n                const x = types.filter(distinct).join('/');\n                this.metadata.setFormat('container', x);\n            },\n            /**\n             * Parse sample description atom\n             */\n            stsd: async (len) => {\n                const stsd = await this.tokenizer.readToken(new AtomToken.StsdAtom(len));\n                const trackDescription = this.getTrackDescription();\n                trackDescription.soundSampleDescription = stsd.table.map(dfEntry => this.parseSoundSampleDescription(dfEntry));\n            },\n            /**\n             * Parse sample-sizes atom ('stsz')\n             */\n            stsz: async (len) => {\n                const stsz = await this.tokenizer.readToken(new AtomToken.StszAtom(len));\n                const td = this.getTrackDescription();\n                td.sampleSize = stsz.sampleSize;\n                td.sampleSizeTable = stsz.entries;\n            },\n            date: async (len) => {\n                const date = await this.tokenizer.readToken(new Token.StringType(len, 'utf-8'));\n                await this.addTag('date', date);\n            }\n        };\n    }\n    static read_BE_Integer(array, signed) {\n        const integerType = (signed ? 'INT' : 'UINT') + array.length * 8 + (array.length > 1 ? '_BE' : '');\n        const token = Token[integerType];\n        if (!token) {\n            throw new Mp4ContentError(`Token for integer type not found: \"${integerType}\"`);\n        }\n        return Number(token.get(array, 0));\n    }\n    async parse() {\n        this.hasVideoTrack = false;\n        this.hasAudioTrack = true;\n        this.tracks.clear();\n        let remainingFileSize = this.tokenizer.fileInfo.size || 0;\n        while (!this.tokenizer.fileInfo.size || remainingFileSize > 0) {\n            try {\n                const token = await this.tokenizer.peekToken(AtomToken.Header);\n                if (token.name === '\\0\\0\\0\\0') {\n                    const errMsg = `Error at offset=${this.tokenizer.position}: box.id=0`;\n                    debug(errMsg);\n                    this.addWarning(errMsg);\n                    break;\n                }\n            }\n            catch (error) {\n                if (error instanceof Error) {\n                    const errMsg = `Error at offset=${this.tokenizer.position}: ${error.message}`;\n                    debug(errMsg);\n                    this.addWarning(errMsg);\n                }\n                else\n                    throw error;\n                break;\n            }\n            const rootAtom = await Atom.readAtom(this.tokenizer, (atom, remaining) => this.handleAtom(atom, remaining), null, remainingFileSize);\n            remainingFileSize -= rootAtom.header.length === BigInt(0) ? remainingFileSize : Number(rootAtom.header.length);\n        }\n        // Post process metadata\n        const formatList = [];\n        this.tracks.forEach(track => {\n            const trackFormats = [];\n            track.soundSampleDescription.forEach(ssd => {\n                const streamInfo = {};\n                const encoderInfo = encoderDict[ssd.dataFormat];\n                if (encoderInfo) {\n                    trackFormats.push(encoderInfo.format);\n                    streamInfo.codecName = encoderInfo.format;\n                }\n                else {\n                    streamInfo.codecName = `<${ssd.dataFormat}>`;\n                }\n                if (ssd.description) {\n                    const { description } = ssd;\n                    if (description.sampleRate > 0) {\n                        streamInfo.type = TrackType.audio;\n                        streamInfo.audio = {\n                            samplingFrequency: description.sampleRate,\n                            bitDepth: description.sampleSize,\n                            channels: description.numAudioChannels\n                        };\n                    }\n                }\n                this.metadata.addStreamInfo(streamInfo);\n            });\n            if (trackFormats.length >= 1) {\n                formatList.push(trackFormats.join('/'));\n            }\n        });\n        if (formatList.length > 0) {\n            this.metadata.setFormat('codec', formatList.filter(distinct).join('+'));\n        }\n        const audioTracks = [...this.tracks.values()].filter(track => {\n            return track.soundSampleDescription.length >= 1 && track.soundSampleDescription[0].description && track.soundSampleDescription[0].description.numAudioChannels > 0;\n        });\n        if (audioTracks.length >= 1) {\n            const audioTrack = audioTracks[0];\n            if (audioTrack.media.header && audioTrack.media.header.timeScale > 0) {\n                if (audioTrack.media.header.duration > 0) {\n                    debug('Using duration defined on audio track');\n                    const duration = audioTrack.media.header.duration / audioTrack.media.header.timeScale; // calculate duration in seconds\n                    this.metadata.setFormat('duration', duration);\n                }\n                else if (audioTrack.fragments.length > 0) {\n                    debug('Calculate duration defined in track fragments');\n                    let totalTimeUnits = 0;\n                    for (const fragment of audioTrack.fragments) {\n                        const defaultDuration = fragment.header.defaultSampleDuration;\n                        for (const sample of fragment.trackRun.samples) {\n                            const dur = sample.sampleDuration ?? defaultDuration;\n                            if (dur == null) {\n                                throw new Error(\"Missing sampleDuration and no default_sample_duration in tfhd\");\n                            }\n                            totalTimeUnits += dur;\n                        }\n                    }\n                    this.metadata.setFormat('duration', totalTimeUnits / audioTrack.media.header.timeScale);\n                }\n            }\n            const ssd = audioTrack.soundSampleDescription[0];\n            if (ssd.description && audioTrack.media.header) {\n                this.metadata.setFormat('sampleRate', ssd.description.sampleRate);\n                this.metadata.setFormat('bitsPerSample', ssd.description.sampleSize);\n                this.metadata.setFormat('numberOfChannels', ssd.description.numAudioChannels);\n                if (audioTrack.media.header.timeScale === 0 && audioTrack.timeToSampleTable.length > 0) {\n                    const totalSampleSize = audioTrack.timeToSampleTable\n                        .map(ttstEntry => ttstEntry.count * ttstEntry.duration)\n                        .reduce((total, sampleSize) => total + sampleSize);\n                    const duration = totalSampleSize / ssd.description.sampleRate;\n                    this.metadata.setFormat('duration', duration);\n                }\n            }\n            const encoderInfo = encoderDict[ssd.dataFormat];\n            if (encoderInfo) {\n                this.metadata.setFormat('lossless', !encoderInfo.lossy);\n            }\n            this.calculateBitRate();\n        }\n        this.metadata.setFormat('hasAudio', this.hasAudioTrack);\n        this.metadata.setFormat('hasVideo', this.hasVideoTrack);\n    }\n    async handleAtom(atom, remaining) {\n        if (atom.parent) {\n            switch (atom.parent.header.name) {\n                case 'ilst':\n                case '<id>':\n                    return this.parseMetadataItemData(atom);\n                case 'moov':\n                    switch (atom.header.name) {\n                        case 'trak':\n                            return this.parseTrackBox(atom);\n                    }\n                    break;\n                case 'moof':\n                    switch (atom.header.name) {\n                        case 'traf':\n                            return this.parseTrackFragmentBox(atom);\n                    }\n            }\n        }\n        // const payloadLength = atom.getPayloadLength(remaining);\n        if (this.atomParsers[atom.header.name]) {\n            return this.atomParsers[atom.header.name](remaining);\n        }\n        debug(`No parser for atom path=${atom.atomPath}, payload-len=${remaining}, ignoring atom`);\n        await this.tokenizer.ignore(remaining);\n    }\n    getTrackDescription() {\n        // ToDo: pick the right track, not the last track!!!!\n        const tracks = [...this.tracks.values()];\n        return tracks[tracks.length - 1];\n    }\n    calculateBitRate() {\n        if (this.audioLengthInBytes && this.metadata.format.duration) {\n            this.metadata.setFormat('bitrate', 8 * this.audioLengthInBytes / this.metadata.format.duration);\n        }\n    }\n    async addTag(id, value) {\n        await this.metadata.addTag(tagFormat, id, value);\n    }\n    addWarning(message) {\n        debug(`Warning: ${message}`);\n        this.metadata.addWarning(message);\n    }\n    /**\n     * Parse data of Meta-item-list-atom (item of 'ilst' atom)\n     * @param metaAtom\n     * Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW8\n     */\n    parseMetadataItemData(metaAtom) {\n        let tagKey = metaAtom.header.name;\n        return metaAtom.readAtoms(this.tokenizer, async (child, remaining) => {\n            const payLoadLength = child.getPayloadLength(remaining);\n            switch (child.header.name) {\n                case 'data': // value atom\n                    return this.parseValueAtom(tagKey, child);\n                case 'name': // name atom (optional)\n                case 'mean':\n                case 'rate': {\n                    const name = await this.tokenizer.readToken(new AtomToken.NameAtom(payLoadLength));\n                    tagKey += `:${name.name}`;\n                    break;\n                }\n                default: {\n                    const uint8Array = await this.tokenizer.readToken(new Token.Uint8ArrayType(payLoadLength));\n                    this.addWarning(`Unsupported meta-item: ${tagKey}[${child.header.name}] => value=${uint8ArrayToHex(uint8Array)} ascii=${uint8ArrayToString(uint8Array, 'ascii')}`);\n                }\n            }\n        }, metaAtom.getPayloadLength(0));\n    }\n    async parseValueAtom(tagKey, metaAtom) {\n        const dataAtom = await this.tokenizer.readToken(new AtomToken.DataAtom(Number(metaAtom.header.length) - AtomToken.Header.len));\n        if (dataAtom.type.set !== 0) {\n            throw new Mp4ContentError(`Unsupported type-set != 0: ${dataAtom.type.set}`);\n        }\n        // Use well-known-type table\n        // Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW35\n        switch (dataAtom.type.type) {\n            case 0: // reserved: Reserved for use where no type needs to be indicated\n                switch (tagKey) {\n                    case 'trkn':\n                    case 'disk': {\n                        const num = Token.UINT8.get(dataAtom.value, 3);\n                        const of = Token.UINT8.get(dataAtom.value, 5);\n                        // console.log(\"  %s[data] = %s/%s\", tagKey, num, of);\n                        await this.addTag(tagKey, `${num}/${of}`);\n                        break;\n                    }\n                    case 'gnre': {\n                        const genreInt = Token.UINT8.get(dataAtom.value, 1);\n                        const genreStr = Genres[genreInt - 1];\n                        // console.log(\"  %s[data] = %s\", tagKey, genreStr);\n                        await this.addTag(tagKey, genreStr);\n                        break;\n                    }\n                    case 'rate': {\n                        const rate = new TextDecoder('ascii').decode(dataAtom.value);\n                        await this.addTag(tagKey, rate);\n                        break;\n                    }\n                    default:\n                        debug(`unknown proprietary value type for: ${metaAtom.atomPath}`);\n                }\n                break;\n            case 1: // UTF-8: Without any count or NULL terminator\n            case 18: // Unknown: Found in m4b in combination with a '©gen' tag\n                await this.addTag(tagKey, new TextDecoder('utf-8').decode(dataAtom.value));\n                break;\n            case 13: // JPEG\n                if (this.options.skipCovers)\n                    break;\n                await this.addTag(tagKey, {\n                    format: 'image/jpeg',\n                    data: Uint8Array.from(dataAtom.value)\n                });\n                break;\n            case 14: // PNG\n                if (this.options.skipCovers)\n                    break;\n                await this.addTag(tagKey, {\n                    format: 'image/png',\n                    data: Uint8Array.from(dataAtom.value)\n                });\n                break;\n            case 21: // BE Signed Integer\n                await this.addTag(tagKey, MP4Parser.read_BE_Integer(dataAtom.value, true));\n                break;\n            case 22: // BE Unsigned Integer\n                await this.addTag(tagKey, MP4Parser.read_BE_Integer(dataAtom.value, false));\n                break;\n            case 65: // An 8-bit signed integer\n                await this.addTag(tagKey, Token.UINT8.get(dataAtom.value, 0));\n                break;\n            case 66: // A big-endian 16-bit signed integer\n                await this.addTag(tagKey, Token.UINT16_BE.get(dataAtom.value, 0));\n                break;\n            case 67: // A big-endian 32-bit signed integer\n                await this.addTag(tagKey, Token.UINT32_BE.get(dataAtom.value, 0));\n                break;\n            default:\n                this.addWarning(`atom key=${tagKey}, has unknown well-known-type (data-type): ${dataAtom.type.type}`);\n        }\n    }\n    async parseTrackBox(trakBox) {\n        // @ts-ignore\n        const track = {\n            media: {},\n            fragments: []\n        };\n        await trakBox.readAtoms(this.tokenizer, async (child, remaining) => {\n            const payLoadLength = child.getPayloadLength(remaining);\n            switch (child.header.name) {\n                case 'chap': {\n                    const chap = await this.tokenizer.readToken(new ChapterTrackReferenceBox(remaining));\n                    track.chapterList = chap;\n                    break;\n                }\n                case 'tkhd': // TrackHeaderBox\n                    track.header = await this.tokenizer.readToken(new AtomToken.TrackHeaderAtom(payLoadLength));\n                    break;\n                case 'hdlr': // TrackHeaderBox\n                    track.handler = await this.tokenizer.readToken(new AtomToken.HandlerBox(payLoadLength));\n                    switch (track.handler.handlerType) {\n                        case 'audi':\n                            debug('Contains audio track');\n                            this.hasAudioTrack = true;\n                            break;\n                        case 'vide':\n                            debug('Contains video track');\n                            this.hasVideoTrack = true;\n                            break;\n                    }\n                    break;\n                case 'mdhd': { // Parse media header (mdhd) box\n                    const mdhd_data = await this.tokenizer.readToken(new AtomToken.MdhdAtom(payLoadLength));\n                    track.media.header = mdhd_data;\n                    break;\n                }\n                case 'stco': {\n                    const stco = await this.tokenizer.readToken(new AtomToken.StcoAtom(payLoadLength));\n                    track.chunkOffsetTable = stco.entries; // remember chunk offsets\n                    break;\n                }\n                case 'stsc': { // sample-to-Chunk box\n                    const stsc = await this.tokenizer.readToken(new AtomToken.StscAtom(payLoadLength));\n                    track.sampleToChunkTable = stsc.entries;\n                    break;\n                }\n                case 'stsd': { // sample description box\n                    const stsd = await this.tokenizer.readToken(new AtomToken.StsdAtom(payLoadLength));\n                    track.soundSampleDescription = stsd.table.map(dfEntry => this.parseSoundSampleDescription(dfEntry));\n                    break;\n                }\n                case 'stts': { // time-to-sample table\n                    const stts = await this.tokenizer.readToken(new AtomToken.SttsAtom(payLoadLength));\n                    track.timeToSampleTable = stts.entries;\n                    break;\n                }\n                case 'stsz': {\n                    const stsz = await this.tokenizer.readToken(new AtomToken.StszAtom(payLoadLength));\n                    track.sampleSize = stsz.sampleSize;\n                    track.sampleSizeTable = stsz.entries;\n                    break;\n                }\n                case 'dinf':\n                case 'vmhd':\n                case 'smhd':\n                    debug(`Ignoring: ${child.header.name}`);\n                    await this.tokenizer.ignore(payLoadLength);\n                    break;\n                default: {\n                    debug(`Unexpected track box: ${child.header.name}`);\n                    await this.tokenizer.ignore(payLoadLength);\n                }\n            }\n        }, trakBox.getPayloadLength(0));\n        // Register track\n        this.tracks.set(track.header.trackId, track);\n    }\n    parseTrackFragmentBox(trafBox) {\n        let tfhd;\n        return trafBox.readAtoms(this.tokenizer, async (child, remaining) => {\n            const payLoadLength = child.getPayloadLength(remaining);\n            switch (child.header.name) {\n                case 'tfhd': { // TrackFragmentHeaderBox\n                    const fragmentHeaderBox = new AtomToken.TrackFragmentHeaderBox(child.getPayloadLength(remaining));\n                    tfhd = await this.tokenizer.readToken(fragmentHeaderBox);\n                    break;\n                }\n                case 'tfdt': // TrackFragmentBaseMediaDecodeTimeBo\n                    await this.tokenizer.ignore(payLoadLength);\n                    break;\n                case 'trun': { // TrackRunBox\n                    const trackRunBox = new AtomToken.TrackRunBox(payLoadLength);\n                    const trun = await this.tokenizer.readToken(trackRunBox);\n                    if (tfhd) {\n                        const track = this.tracks.get(tfhd.trackId);\n                        track?.fragments.push({ header: tfhd, trackRun: trun });\n                    }\n                    break;\n                }\n                default: {\n                    debug(`Unexpected box: ${child.header.name}`);\n                    await this.tokenizer.ignore(payLoadLength);\n                }\n            }\n        }, trafBox.getPayloadLength(0));\n    }\n    /**\n     * @param sampleDescription\n     * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-128916\n     */\n    parseSoundSampleDescription(sampleDescription) {\n        const ssd = {\n            dataFormat: sampleDescription.dataFormat,\n            dataReferenceIndex: sampleDescription.dataReferenceIndex\n        };\n        let offset = 0;\n        if (sampleDescription.description) {\n            const version = AtomToken.SoundSampleDescriptionVersion.get(sampleDescription.description, offset);\n            offset += AtomToken.SoundSampleDescriptionVersion.len;\n            if (version.version === 0 || version.version === 1) {\n                // Sound Sample Description (Version 0)\n                ssd.description = AtomToken.SoundSampleDescriptionV0.get(sampleDescription.description, offset);\n            }\n            else {\n                debug(`Warning: sound-sample-description ${version} not implemented`);\n            }\n        }\n        return ssd;\n    }\n    async parseChapterTrack(chapterTrack, track, len) {\n        if (!chapterTrack.sampleSize) {\n            if (chapterTrack.chunkOffsetTable.length !== chapterTrack.sampleSizeTable.length)\n                throw new Error('Expected equal chunk-offset-table & sample-size-table length.');\n        }\n        const chapters = [];\n        for (let i = 0; i < chapterTrack.chunkOffsetTable.length && len > 0; ++i) {\n            const start = chapterTrack.timeToSampleTable\n                .slice(0, i)\n                .reduce((acc, cur) => acc + cur.duration, 0);\n            const chunkOffset = chapterTrack.chunkOffsetTable[i];\n            const nextChunkLen = chunkOffset - this.tokenizer.position;\n            const sampleSize = chapterTrack.sampleSize > 0 ? chapterTrack.sampleSize : chapterTrack.sampleSizeTable[i];\n            len -= nextChunkLen + sampleSize;\n            if (len < 0)\n                throw new Mp4ContentError('Chapter chunk exceeding token length');\n            await this.tokenizer.ignore(nextChunkLen);\n            const title = await this.tokenizer.readToken(new AtomToken.ChapterText(sampleSize));\n            debug(`Chapter ${i + 1}: ${title}`);\n            const chapter = {\n                title,\n                timeScale: chapterTrack.media.header ? chapterTrack.media.header.timeScale : 0,\n                start,\n                sampleOffset: this.findSampleOffset(track, this.tokenizer.position)\n            };\n            debug(`Chapter title=${chapter.title}, offset=${chapter.sampleOffset}/${track.header.duration}`); // ToDo, use media duration if required!!!\n            chapters.push(chapter);\n        }\n        this.metadata.setFormat('chapters', chapters);\n        await this.tokenizer.ignore(len);\n    }\n    findSampleOffset(track, chapterOffset) {\n        let chunkIndex = 0;\n        while (chunkIndex < track.chunkOffsetTable.length && track.chunkOffsetTable[chunkIndex] < chapterOffset) {\n            ++chunkIndex;\n        }\n        return this.getChunkDuration(chunkIndex + 1, track);\n    }\n    getChunkDuration(chunkId, track) {\n        let ttsi = 0;\n        let ttsc = track.timeToSampleTable[ttsi].count;\n        let ttsd = track.timeToSampleTable[ttsi].duration;\n        let curChunkId = 1;\n        let samplesPerChunk = this.getSamplesPerChunk(curChunkId, track.sampleToChunkTable);\n        let totalDuration = 0;\n        while (curChunkId < chunkId) {\n            const nrOfSamples = Math.min(ttsc, samplesPerChunk);\n            totalDuration += nrOfSamples * ttsd;\n            ttsc -= nrOfSamples;\n            samplesPerChunk -= nrOfSamples;\n            if (samplesPerChunk === 0) {\n                ++curChunkId;\n                samplesPerChunk = this.getSamplesPerChunk(curChunkId, track.sampleToChunkTable);\n            }\n            else {\n                ++ttsi;\n                ttsc = track.timeToSampleTable[ttsi].count;\n                ttsd = track.timeToSampleTable[ttsi].duration;\n            }\n        }\n        return totalDuration;\n    }\n    getSamplesPerChunk(chunkId, stcTable) {\n        for (let i = 0; i < stcTable.length - 1; ++i) {\n            if (chunkId >= stcTable[i].firstChunk && chunkId < stcTable[i + 1].firstChunk) {\n                return stcTable[i].samplesPerChunk;\n            }\n        }\n        return stcTable[stcTable.length - 1].samplesPerChunk;\n    }\n}\n//# sourceMappingURL=MP4Parser.js.map","import * as Token from 'token-types';\nimport initDebug from 'debug';\nimport * as util from '../../common/Util.js';\nconst debug = initDebug('music-metadata:parser:musepack:sv8');\nconst PacketKey = new Token.StringType(2, 'latin1');\n/**\n * Stream Header Packet part 1\n * Ref: http://trac.musepack.net/musepack/wiki/SV8Specification#StreamHeaderPacket\n */\nconst SH_part1 = {\n    len: 5,\n    get: (buf, off) => {\n        return {\n            crc: Token.UINT32_LE.get(buf, off),\n            streamVersion: Token.UINT8.get(buf, off + 4)\n        };\n    }\n};\n/**\n * Stream Header Packet part 3\n * Ref: http://trac.musepack.net/musepack/wiki/SV8Specification#StreamHeaderPacket\n */\nconst SH_part3 = {\n    len: 2,\n    get: (buf, off) => {\n        return {\n            sampleFrequency: [44100, 48000, 37800, 32000][util.getBitAllignedNumber(buf, off, 0, 3)],\n            maxUsedBands: util.getBitAllignedNumber(buf, off, 3, 5),\n            channelCount: util.getBitAllignedNumber(buf, off + 1, 0, 4) + 1,\n            msUsed: util.isBitSet(buf, off + 1, 4),\n            audioBlockFrames: util.getBitAllignedNumber(buf, off + 1, 5, 3)\n        };\n    }\n};\nexport class StreamReader {\n    get tokenizer() {\n        return this._tokenizer;\n    }\n    set tokenizer(value) {\n        this._tokenizer = value;\n    }\n    constructor(_tokenizer) {\n        this._tokenizer = _tokenizer;\n    }\n    async readPacketHeader() {\n        const key = await this.tokenizer.readToken(PacketKey);\n        const size = await this.readVariableSizeField();\n        return {\n            key,\n            payloadLength: size.value - 2 - size.len\n        };\n    }\n    async readStreamHeader(size) {\n        const streamHeader = {};\n        debug(`Reading SH at offset=${this.tokenizer.position}`);\n        const part1 = await this.tokenizer.readToken(SH_part1);\n        size -= SH_part1.len;\n        Object.assign(streamHeader, part1);\n        debug(`SH.streamVersion = ${part1.streamVersion}`);\n        const sampleCount = await this.readVariableSizeField();\n        size -= sampleCount.len;\n        streamHeader.sampleCount = sampleCount.value;\n        const bs = await this.readVariableSizeField();\n        size -= bs.len;\n        streamHeader.beginningOfSilence = bs.value;\n        const part3 = await this.tokenizer.readToken(SH_part3);\n        size -= SH_part3.len;\n        Object.assign(streamHeader, part3);\n        // assert.equal(size, 0);\n        await this.tokenizer.ignore(size);\n        return streamHeader;\n    }\n    async readVariableSizeField(len = 1, hb = 0) {\n        let n = await this.tokenizer.readNumber(Token.UINT8);\n        if ((n & 0x80) === 0) {\n            return { len, value: hb + n };\n        }\n        n &= 0x7F;\n        n += hb;\n        return this.readVariableSizeField(len + 1, n << 7);\n    }\n}\n//# sourceMappingURL=StreamVersion8.js.map","import { makeUnexpectedFileContentError } from '../ParseError.js';\nexport class MusepackContentError extends makeUnexpectedFileContentError('Musepack') {\n}\n//# sourceMappingURL=MusepackConentError.js.map","import initDebug from 'debug';\nimport { BasicParser } from '../../common/BasicParser.js';\nimport { tryParseApeHeader } from '../../apev2/APEv2Parser.js';\nimport { FourCcToken } from '../../common/FourCC.js';\nimport * as SV8 from './StreamVersion8.js';\nimport { MusepackContentError } from '../MusepackConentError.js';\nconst debug = initDebug('music-metadata:parser:musepack');\nexport class MpcSv8Parser extends BasicParser {\n    constructor() {\n        super(...arguments);\n        this.audioLength = 0;\n    }\n    async parse() {\n        const signature = await this.tokenizer.readToken(FourCcToken);\n        if (signature !== 'MPCK')\n            throw new MusepackContentError('Invalid Magic number');\n        this.metadata.setFormat('container', 'Musepack, SV8');\n        return this.parsePacket();\n    }\n    async parsePacket() {\n        const sv8reader = new SV8.StreamReader(this.tokenizer);\n        do {\n            const header = await sv8reader.readPacketHeader();\n            debug(`packet-header key=${header.key}, payloadLength=${header.payloadLength}`);\n            switch (header.key) {\n                case 'SH': { // Stream Header\n                    const sh = await sv8reader.readStreamHeader(header.payloadLength);\n                    this.metadata.setFormat('numberOfSamples', sh.sampleCount);\n                    this.metadata.setFormat('sampleRate', sh.sampleFrequency);\n                    this.metadata.setFormat('duration', sh.sampleCount / sh.sampleFrequency);\n                    this.metadata.setFormat('numberOfChannels', sh.channelCount);\n                    break;\n                }\n                case 'AP': // Audio Packet\n                    this.audioLength += header.payloadLength;\n                    await this.tokenizer.ignore(header.payloadLength);\n                    break;\n                case 'RG': // Replaygain\n                case 'EI': // Encoder Info\n                case 'SO': // Seek Table Offset\n                case 'ST': // Seek Table\n                case 'CT': // Chapter-Tag\n                    await this.tokenizer.ignore(header.payloadLength);\n                    break;\n                case 'SE': // Stream End\n                    if (this.metadata.format.duration) {\n                        this.metadata.setFormat('bitrate', this.audioLength * 8 / this.metadata.format.duration);\n                    }\n                    return tryParseApeHeader(this.metadata, this.tokenizer, this.options);\n                default:\n                    throw new MusepackContentError(`Unexpected header: ${header.key}`);\n            }\n            // biome-ignore lint/correctness/noConstantCondition: break is handled in the switch statement\n        } while (true);\n    }\n}\n//# sourceMappingURL=MpcSv8Parser.js.map","import * as Token from 'token-types';\nexport class BitReader {\n    constructor(tokenizer) {\n        this.pos = 0;\n        this.dword = null;\n        this.tokenizer = tokenizer;\n    }\n    /**\n     *\n     * @param bits 1..30 bits\n     */\n    async read(bits) {\n        while (this.dword === null) {\n            this.dword = await this.tokenizer.readToken(Token.UINT32_LE);\n        }\n        let out = this.dword;\n        this.pos += bits;\n        if (this.pos < 32) {\n            out >>>= (32 - this.pos);\n            return out & ((1 << bits) - 1);\n        }\n        this.pos -= 32;\n        if (this.pos === 0) {\n            this.dword = null;\n            return out & ((1 << bits) - 1);\n        }\n        this.dword = await this.tokenizer.readToken(Token.UINT32_LE);\n        if (this.pos) {\n            out <<= this.pos;\n            out |= this.dword >>> (32 - this.pos);\n        }\n        return out & ((1 << bits) - 1);\n    }\n    async ignore(bits) {\n        if (this.pos > 0) {\n            const remaining = 32 - this.pos;\n            this.dword = null;\n            bits -= remaining;\n            this.pos = 0;\n        }\n        const remainder = bits % 32;\n        const numOfWords = (bits - remainder) / 32;\n        await this.tokenizer.ignore(numOfWords * 4);\n        return this.read(remainder);\n    }\n}\n//# sourceMappingURL=BitReader.js.map","import * as Token from 'token-types';\nimport * as util from '../../common/Util.js';\n/**\n * BASIC STRUCTURE\n */\nexport const Header = {\n    len: 6 * 4,\n    get: (buf, off) => {\n        const header = {\n            // word 0\n            signature: new TextDecoder('latin1').decode(buf.subarray(off, off + 3)),\n            // versionIndex number * 1000 (3.81 = 3810) (remember that 4-byte alignment causes this to take 4-bytes)\n            streamMinorVersion: util.getBitAllignedNumber(buf, off + 3, 0, 4),\n            streamMajorVersion: util.getBitAllignedNumber(buf, off + 3, 4, 4),\n            // word 1\n            frameCount: Token.UINT32_LE.get(buf, off + 4),\n            // word 2\n            maxLevel: Token.UINT16_LE.get(buf, off + 8),\n            sampleFrequency: [44100, 48000, 37800, 32000][util.getBitAllignedNumber(buf, off + 10, 0, 2)],\n            link: util.getBitAllignedNumber(buf, off + 10, 2, 2),\n            profile: util.getBitAllignedNumber(buf, off + 10, 4, 4),\n            maxBand: util.getBitAllignedNumber(buf, off + 11, 0, 6),\n            intensityStereo: util.isBitSet(buf, off + 11, 6),\n            midSideStereo: util.isBitSet(buf, off + 11, 7),\n            // word 3\n            titlePeak: Token.UINT16_LE.get(buf, off + 12),\n            titleGain: Token.UINT16_LE.get(buf, off + 14),\n            // word 4\n            albumPeak: Token.UINT16_LE.get(buf, off + 16),\n            albumGain: Token.UINT16_LE.get(buf, off + 18),\n            // word\n            lastFrameLength: (Token.UINT32_LE.get(buf, off + 20) >>> 20) & 0x7FF,\n            trueGapless: util.isBitSet(buf, off + 23, 0)\n        };\n        header.lastFrameLength = header.trueGapless ? (Token.UINT32_LE.get(buf, 20) >>> 20) & 0x7FF : 0;\n        return header;\n    }\n};\n//# sourceMappingURL=StreamVersion7.js.map","import initDebug from 'debug';\nimport { BasicParser } from '../../common/BasicParser.js';\nimport { tryParseApeHeader } from '../../apev2/APEv2Parser.js';\nimport { BitReader } from './BitReader.js';\nimport * as SV7 from './StreamVersion7.js';\nimport { MusepackContentError } from '../MusepackConentError.js';\nconst debug = initDebug('music-metadata:parser:musepack');\nexport class MpcSv7Parser extends BasicParser {\n    constructor() {\n        super(...arguments);\n        this.bitreader = null;\n        this.audioLength = 0;\n        this.duration = null;\n    }\n    async parse() {\n        const header = await this.tokenizer.readToken(SV7.Header);\n        if (header.signature !== 'MP+')\n            throw new MusepackContentError('Unexpected magic number');\n        debug(`stream-version=${header.streamMajorVersion}.${header.streamMinorVersion}`);\n        this.metadata.setFormat('container', 'Musepack, SV7');\n        this.metadata.setFormat('sampleRate', header.sampleFrequency);\n        const numberOfSamples = 1152 * (header.frameCount - 1) + header.lastFrameLength;\n        this.metadata.setFormat('numberOfSamples', numberOfSamples);\n        this.duration = numberOfSamples / header.sampleFrequency;\n        this.metadata.setFormat('duration', this.duration);\n        this.bitreader = new BitReader(this.tokenizer);\n        this.metadata.setFormat('numberOfChannels', header.midSideStereo || header.intensityStereo ? 2 : 1);\n        const version = await this.bitreader.read(8);\n        this.metadata.setFormat('codec', (version / 100).toFixed(2));\n        await this.skipAudioData(header.frameCount);\n        debug(`End of audio stream, switching to APEv2, offset=${this.tokenizer.position}`);\n        return tryParseApeHeader(this.metadata, this.tokenizer, this.options);\n    }\n    async skipAudioData(frameCount) {\n        while (frameCount-- > 0) {\n            const frameLength = await this.bitreader.read(20);\n            this.audioLength += 20 + frameLength;\n            await this.bitreader.ignore(frameLength);\n        }\n        // last frame\n        const lastFrameLength = await this.bitreader.read(11);\n        this.audioLength += lastFrameLength;\n        if (this.duration !== null) {\n            this.metadata.setFormat('bitrate', this.audioLength / this.duration);\n        }\n    }\n}\n//# sourceMappingURL=MpcSv7Parser.js.map","import initDebug from 'debug';\nimport * as Token from 'token-types';\nimport { AbstractID3Parser } from '../id3v2/AbstractID3Parser.js';\nimport { MpcSv8Parser } from './sv8/MpcSv8Parser.js';\nimport { MpcSv7Parser } from './sv7/MpcSv7Parser.js';\nimport { MusepackContentError } from './MusepackConentError.js';\nconst debug = initDebug('music-metadata:parser:musepack');\nexport class MusepackParser extends AbstractID3Parser {\n    async postId3v2Parse() {\n        const signature = await this.tokenizer.peekToken(new Token.StringType(3, 'latin1'));\n        let mpcParser;\n        switch (signature) {\n            case 'MP+': {\n                debug('Stream-version 7');\n                mpcParser = new MpcSv7Parser(this.metadata, this.tokenizer, this.options);\n                break;\n            }\n            case 'MPC': {\n                debug('Stream-version 8');\n                mpcParser = new MpcSv8Parser(this.metadata, this.tokenizer, this.options);\n                break;\n            }\n            default: {\n                throw new MusepackContentError('Invalid signature prefix');\n            }\n        }\n        this.metadata.setAudioOnly();\n        return mpcParser.parse();\n    }\n}\n//# sourceMappingURL=MusepackParser.js.map","import * as Token from 'token-types';\nimport { makeUnexpectedFileContentError } from '../../ParseError.js';\nexport class OpusContentError extends makeUnexpectedFileContentError('Opus') {\n}\n/**\n * Opus ID Header parser\n * Ref: https://wiki.xiph.org/OggOpus#ID_Header\n */\nexport class IdHeader {\n    constructor(len) {\n        if (len < 19) {\n            throw new OpusContentError('ID-header-page 0 should be at least 19 bytes long');\n        }\n        this.len = len;\n    }\n    get(buf, off) {\n        return {\n            magicSignature: new Token.StringType(8, 'ascii').get(buf, off + 0),\n            version: Token.UINT8.get(buf, off + 8),\n            channelCount: Token.UINT8.get(buf, off + 9),\n            preSkip: Token.UINT16_LE.get(buf, off + 10),\n            inputSampleRate: Token.UINT32_LE.get(buf, off + 12),\n            outputGain: Token.UINT16_LE.get(buf, off + 16),\n            channelMapping: Token.UINT8.get(buf, off + 18)\n        };\n    }\n}\n//# sourceMappingURL=Opus.js.map","import * as Token from 'token-types';\nimport { VorbisStream } from '../vorbis/VorbisStream.js';\nimport * as Opus from './Opus.js';\nimport { OpusContentError } from './Opus.js';\n/**\n * Opus parser\n * Internet Engineering Task Force (IETF) - RFC 6716\n * Used by OggStream\n */\nexport class OpusStream extends VorbisStream {\n    constructor(metadata, options, tokenizer) {\n        super(metadata, options);\n        this.idHeader = null;\n        this.lastPos = -1;\n        this.tokenizer = tokenizer;\n    }\n    /**\n     * Parse first Opus Ogg page\n     * @param {IPageHeader} header\n     * @param {Uint8Array} pageData\n     */\n    parseFirstPage(_header, pageData) {\n        this.metadata.setFormat('codec', 'Opus');\n        // Parse Opus ID Header\n        this.idHeader = new Opus.IdHeader(pageData.length).get(pageData, 0);\n        if (this.idHeader.magicSignature !== \"OpusHead\")\n            throw new OpusContentError(\"Illegal ogg/Opus magic-signature\");\n        this.metadata.setFormat('sampleRate', this.idHeader.inputSampleRate);\n        this.metadata.setFormat('numberOfChannels', this.idHeader.channelCount);\n        this.metadata.setAudioOnly();\n    }\n    async parseFullPage(pageData) {\n        const magicSignature = new Token.StringType(8, 'ascii').get(pageData, 0);\n        switch (magicSignature) {\n            case 'OpusTags':\n                await this.parseUserCommentList(pageData, 8);\n                this.lastPos = this.tokenizer.position - pageData.length;\n                break;\n            default:\n                break;\n        }\n    }\n    calculateDuration() {\n        if (this.lastPageHeader && this.metadata.format.sampleRate && this.lastPageHeader.absoluteGranulePosition >= 0) {\n            // Calculate duration\n            const pos_48bit = this.lastPageHeader.absoluteGranulePosition - this.idHeader.preSkip;\n            this.metadata.setFormat('numberOfSamples', pos_48bit);\n            this.metadata.setFormat('duration', pos_48bit / 48000);\n            if (this.lastPos !== -1 && this.tokenizer.fileInfo.size && this.metadata.format.duration) {\n                const dataSize = this.tokenizer.fileInfo.size - this.lastPos;\n                this.metadata.setFormat('bitrate', 8 * dataSize / this.metadata.format.duration);\n            }\n        }\n    }\n}\n//# sourceMappingURL=OpusStream.js.map","import * as Token from 'token-types';\nimport * as util from '../../common/Util.js';\n/**\n * Speex Header Packet\n * Ref: https://www.speex.org/docs/manual/speex-manual/node8.html#SECTION00830000000000000000\n */\nexport const Header = {\n    len: 80,\n    get: (buf, off) => {\n        return {\n            speex: new Token.StringType(8, 'ascii').get(buf, off + 0),\n            version: util.trimRightNull(new Token.StringType(20, 'ascii').get(buf, off + 8)),\n            version_id: Token.INT32_LE.get(buf, off + 28),\n            header_size: Token.INT32_LE.get(buf, off + 32),\n            rate: Token.INT32_LE.get(buf, off + 36),\n            mode: Token.INT32_LE.get(buf, off + 40),\n            mode_bitstream_version: Token.INT32_LE.get(buf, off + 44),\n            nb_channels: Token.INT32_LE.get(buf, off + 48),\n            bitrate: Token.INT32_LE.get(buf, off + 52),\n            frame_size: Token.INT32_LE.get(buf, off + 56),\n            vbr: Token.INT32_LE.get(buf, off + 60),\n            frames_per_packet: Token.INT32_LE.get(buf, off + 64),\n            extra_headers: Token.INT32_LE.get(buf, off + 68),\n            reserved1: Token.INT32_LE.get(buf, off + 72),\n            reserved2: Token.INT32_LE.get(buf, off + 76)\n        };\n    }\n};\n//# sourceMappingURL=Speex.js.map","import initDebug from 'debug';\nimport { VorbisStream } from '../vorbis/VorbisStream.js';\nimport * as Speex from './Speex.js';\nconst debug = initDebug('music-metadata:parser:ogg:speex');\n/**\n * Speex, RFC 5574\n * Ref:\n * - https://www.speex.org/docs/manual/speex-manual/\n * - https://tools.ietf.org/html/rfc5574\n */\nexport class SpeexStream extends VorbisStream {\n    constructor(metadata, options, tokenizer) {\n        super(metadata, options);\n        this.tokenizer = tokenizer;\n    }\n    /**\n     * Parse first Speex Ogg page\n     * @param {IPageHeader} header\n     * @param {Uint8Array} pageData\n     */\n    parseFirstPage(_header, pageData) {\n        debug('First Ogg/Speex page');\n        const speexHeader = Speex.Header.get(pageData, 0);\n        this.metadata.setFormat('codec', `Speex ${speexHeader.version}`);\n        this.metadata.setFormat('numberOfChannels', speexHeader.nb_channels);\n        this.metadata.setFormat('sampleRate', speexHeader.rate);\n        if (speexHeader.bitrate !== -1) {\n            this.metadata.setFormat('bitrate', speexHeader.bitrate);\n        }\n        this.metadata.setAudioOnly();\n    }\n}\n//# sourceMappingURL=SpeexStream.js.map","import * as Token from 'token-types';\n/**\n * 6.2 Identification Header\n * Ref: https://theora.org/doc/Theora.pdf: 6.2 Identification Header Decode\n */\nexport const IdentificationHeader = {\n    len: 42,\n    get: (buf, off) => {\n        return {\n            id: new Token.StringType(7, 'ascii').get(buf, off),\n            vmaj: Token.UINT8.get(buf, off + 7),\n            vmin: Token.UINT8.get(buf, off + 8),\n            vrev: Token.UINT8.get(buf, off + 9),\n            vmbw: Token.UINT16_BE.get(buf, off + 10),\n            vmbh: Token.UINT16_BE.get(buf, off + 17),\n            nombr: Token.UINT24_BE.get(buf, off + 37),\n            nqual: Token.UINT8.get(buf, off + 40)\n        };\n    }\n};\n//# sourceMappingURL=Theora.js.map","import initDebug from 'debug';\nimport { IdentificationHeader } from './Theora.js';\nconst debug = initDebug('music-metadata:parser:ogg:theora');\n/**\n * Ref:\n * - https://theora.org/doc/Theora.pdf\n */\nexport class TheoraStream {\n    constructor(metadata, _options, tokenizer) {\n        this.metadata = metadata;\n        this.tokenizer = tokenizer;\n    }\n    /**\n     * Vorbis 1 parser\n     * @param header Ogg Page Header\n     * @param pageData Page data\n     */\n    async parsePage(header, pageData) {\n        if (header.headerType.firstPage) {\n            await this.parseFirstPage(header, pageData);\n        }\n    }\n    calculateDuration() {\n        debug('duration calculation not implemented');\n    }\n    /**\n     * Parse first Theora Ogg page. the initial identification header packet\n     */\n    async parseFirstPage(_header, pageData) {\n        debug('First Ogg/Theora page');\n        this.metadata.setFormat('codec', 'Theora');\n        const idHeader = IdentificationHeader.get(pageData, 0);\n        this.metadata.setFormat('bitrate', idHeader.nombr);\n        this.metadata.setFormat('hasVideo', true);\n    }\n    flush() {\n        return Promise.resolve();\n    }\n}\n//# sourceMappingURL=TheoraStream.js.map","import * as Token from 'token-types';\nimport * as util from '../common/Util.js';\nimport { StringType } from 'token-types';\nexport const PageHeader = {\n    len: 27,\n    get: (buf, off) => {\n        return {\n            capturePattern: new StringType(4, 'latin1').get(buf, off),\n            version: Token.UINT8.get(buf, off + 4),\n            headerType: {\n                continued: util.getBit(buf, off + 5, 0),\n                firstPage: util.getBit(buf, off + 5, 1),\n                lastPage: util.getBit(buf, off + 5, 2)\n            },\n            // packet_flag: Token.UINT8.get(buf, off + 5),\n            absoluteGranulePosition: Number(Token.UINT64_LE.get(buf, off + 6)),\n            streamSerialNumber: Token.UINT32_LE.get(buf, off + 14),\n            pageSequenceNo: Token.UINT32_LE.get(buf, off + 18),\n            pageChecksum: Token.UINT32_LE.get(buf, off + 22),\n            page_segments: Token.UINT8.get(buf, off + 26)\n        };\n    }\n};\nexport class SegmentTable {\n    static sum(buf, off, len) {\n        const dv = new DataView(buf.buffer, 0);\n        let s = 0;\n        for (let i = off; i < off + len; ++i) {\n            s += dv.getUint8(i);\n        }\n        return s;\n    }\n    constructor(header) {\n        this.len = header.page_segments;\n    }\n    get(buf, off) {\n        return {\n            totalPageSize: SegmentTable.sum(buf, off, this.len)\n        };\n    }\n}\n//# sourceMappingURL=OggToken.js.map","import * as Token from 'token-types';\nimport { EndOfStreamError } from 'strtok3';\nimport initDebug from 'debug';\nimport { BasicParser } from '../common/BasicParser.js';\nimport { VorbisStream } from './vorbis/VorbisStream.js';\nimport { OpusStream } from './opus/OpusStream.js';\nimport { SpeexStream } from './speex/SpeexStream.js';\nimport { TheoraStream } from './theora/TheoraStream.js';\nimport { makeUnexpectedFileContentError } from '../ParseError.js';\nimport { PageHeader, SegmentTable } from './OggToken.js';\nexport class OggContentError extends makeUnexpectedFileContentError('Ogg') {\n}\nconst debug = initDebug('music-metadata:parser:ogg');\nclass OggStream {\n    constructor(metadata, streamSerial, options) {\n        this.pageNumber = 0;\n        this.closed = false;\n        this.metadata = metadata;\n        this.streamSerial = streamSerial;\n        this.options = options;\n    }\n    async parsePage(tokenizer, header) {\n        this.pageNumber = header.pageSequenceNo;\n        debug('serial=%s page#=%s, Ogg.id=%s', header.streamSerialNumber, header.pageSequenceNo, header.capturePattern);\n        const segmentTable = await tokenizer.readToken(new SegmentTable(header));\n        debug('totalPageSize=%s', segmentTable.totalPageSize);\n        const pageData = await tokenizer.readToken(new Token.Uint8ArrayType(segmentTable.totalPageSize));\n        debug('firstPage=%s, lastPage=%s, continued=%s', header.headerType.firstPage, header.headerType.lastPage, header.headerType.continued);\n        if (header.headerType.firstPage) {\n            const idData = pageData.slice(0, 7); // Copy this portion\n            switch (idData[0]) {\n                case 0x01:\n                case 0x80:\n                    idData[0] = 0x5F; // underscore\n                    break;\n            }\n            const id = new TextDecoder('latin1').decode(idData);\n            switch (id) {\n                case '_vorbis': // Ogg/Vorbis\n                    debug(`Set Ogg stream serial ${header.streamSerialNumber}, codec=Vorbis`);\n                    this.pageConsumer = new VorbisStream(this.metadata, this.options);\n                    break;\n                case 'OpusHea': // Ogg/Opus\n                    debug('Set page consumer to Ogg/Opus');\n                    this.pageConsumer = new OpusStream(this.metadata, this.options, tokenizer);\n                    break;\n                case 'Speex  ': // Ogg/Speex\n                    debug('Set page consumer to Ogg/Speex');\n                    this.pageConsumer = new SpeexStream(this.metadata, this.options, tokenizer);\n                    break;\n                case 'fishead':\n                case '_theora': // Ogg/Theora\n                    debug('Set page consumer to Ogg/Theora');\n                    this.pageConsumer = new TheoraStream(this.metadata, this.options, tokenizer);\n                    break;\n                default:\n                    throw new OggContentError(`Ogg codec not recognized (id=${id})`);\n            }\n        }\n        if (header.headerType.lastPage) {\n            this.closed = true;\n        }\n        if (this.pageConsumer) {\n            await this.pageConsumer.parsePage(header, pageData);\n        }\n        else\n            throw new Error('pageConsumer should be initialized');\n    }\n}\n/**\n * Parser for Ogg logical bitstream framing\n */\nexport class OggParser extends BasicParser {\n    constructor() {\n        super(...arguments);\n        this.streams = new Map();\n    }\n    /**\n     * Parse page\n     * @returns {Promise<void>}\n     */\n    async parse() {\n        this.streams = new Map();\n        debug('pos=%s, parsePage()', this.tokenizer.position);\n        let header;\n        try {\n            do {\n                header = await this.tokenizer.readToken(PageHeader);\n                if (header.capturePattern !== 'OggS')\n                    throw new OggContentError('Invalid Ogg capture pattern');\n                this.metadata.setFormat('container', 'Ogg');\n                let stream = this.streams.get(header.streamSerialNumber);\n                if (!stream) {\n                    stream = new OggStream(this.metadata, header.streamSerialNumber, this.options);\n                    this.streams.set(header.streamSerialNumber, stream);\n                }\n                await stream.parsePage(this.tokenizer, header);\n            } while (![...this.streams.values()].every(item => item.closed));\n        }\n        catch (err) {\n            if (err instanceof EndOfStreamError) {\n                debug(\"Reached end-of-stream\");\n            }\n            else if (err instanceof OggContentError) {\n                this.metadata.addWarning(`Corrupt Ogg content at ${this.tokenizer.position}`);\n            }\n            else\n                throw err;\n        }\n        for (const stream of this.streams.values()) {\n            if (!stream.closed) {\n                this.metadata.addWarning(`End-of-stream reached before reaching last page in Ogg stream serial=${stream.streamSerial}`);\n                await stream.pageConsumer?.flush();\n            }\n            stream.pageConsumer?.calculateDuration();\n        }\n    }\n}\n//# sourceMappingURL=OggParser.js.map","import * as Token from 'token-types';\nimport { FourCcToken } from '../common/FourCC.js';\nconst SampleRates = [6000, 8000, 9600, 11025, 12000, 16000, 22050, 24000, 32000, 44100,\n    48000, 64000, 88200, 96000, 192000, -1];\n/**\n * WavPack Block Header\n *\n * 32-byte little-endian header at the front of every WavPack block\n *\n * Ref: http://www.wavpack.com/WavPack5FileFormat.pdf (page 2/6: 2.0 \"Block Header\")\n */\nexport const BlockHeaderToken = {\n    len: 32,\n    get: (buf, off) => {\n        const flags = Token.UINT32_LE.get(buf, off + 24);\n        const res = {\n            // should equal 'wvpk'\n            BlockID: FourCcToken.get(buf, off),\n            //  0x402 to 0x410 are valid for decode\n            blockSize: Token.UINT32_LE.get(buf, off + 4),\n            //  0x402 (1026) to 0x410 are valid for decode\n            version: Token.UINT16_LE.get(buf, off + 8),\n            //  40-bit total samples for entire file (if block_index == 0 and a value of -1 indicates an unknown length)\n            totalSamples: /* replace with bigint? (Token.UINT8.get(buf, off + 11) << 32) + */ Token.UINT32_LE.get(buf, off + 12),\n            // 40-bit block_index\n            blockIndex: /* replace with bigint? (Token.UINT8.get(buf, off + 10) << 32) + */ Token.UINT32_LE.get(buf, off + 16),\n            // 40-bit total samples for entire file (if block_index == 0 and a value of -1 indicates an unknown length)\n            blockSamples: Token.UINT32_LE.get(buf, off + 20),\n            // various flags for id and decoding\n            flags: {\n                bitsPerSample: (1 + getBitAllignedNumber(flags, 0, 2)) * 8,\n                isMono: isBitSet(flags, 2),\n                isHybrid: isBitSet(flags, 3),\n                isJointStereo: isBitSet(flags, 4),\n                crossChannel: isBitSet(flags, 5),\n                hybridNoiseShaping: isBitSet(flags, 6),\n                floatingPoint: isBitSet(flags, 7),\n                samplingRate: SampleRates[getBitAllignedNumber(flags, 23, 4)],\n                isDSD: isBitSet(flags, 31)\n            },\n            // crc for actual decoded data\n            crc: new Token.Uint8ArrayType(4).get(buf, off + 28)\n        };\n        if (res.flags.isDSD) {\n            res.totalSamples *= 8;\n        }\n        return res;\n    }\n};\n/**\n * 3.0 Metadata Sub-Blocks\n * Ref: http://www.wavpack.com/WavPack5FileFormat.pdf (page 4/6: 3.0 \"Metadata Sub-Block\")\n */\nexport const MetadataIdToken = {\n    len: 1,\n    get: (buf, off) => {\n        return {\n            functionId: getBitAllignedNumber(buf[off], 0, 6), // functionId overlaps with isOptional flag\n            isOptional: isBitSet(buf[off], 5),\n            isOddSize: isBitSet(buf[off], 6),\n            largeBlock: isBitSet(buf[off], 7)\n        };\n    }\n};\nfunction isBitSet(flags, bitOffset) {\n    return getBitAllignedNumber(flags, bitOffset, 1) === 1;\n}\nfunction getBitAllignedNumber(flags, bitOffset, len) {\n    return (flags >>> bitOffset) & (0xffffffff >>> (32 - len));\n}\n//# sourceMappingURL=WavPackToken.js.map","import * as Token from 'token-types';\nimport { tryParseApeHeader } from '../apev2/APEv2Parser.js';\nimport { FourCcToken } from '../common/FourCC.js';\nimport { BasicParser } from '../common/BasicParser.js';\nimport { BlockHeaderToken, MetadataIdToken } from './WavPackToken.js';\nimport initDebug from 'debug';\nimport { uint8ArrayToHex } from 'uint8array-extras';\nimport { makeUnexpectedFileContentError } from '../ParseError.js';\nconst debug = initDebug('music-metadata:parser:WavPack');\nexport class WavPackContentError extends makeUnexpectedFileContentError('WavPack') {\n}\n/**\n * WavPack Parser\n */\nexport class WavPackParser extends BasicParser {\n    constructor() {\n        super(...arguments);\n        this.audioDataSize = 0;\n    }\n    async parse() {\n        this.metadata.setAudioOnly();\n        this.audioDataSize = 0;\n        // First parse all WavPack blocks\n        await this.parseWavPackBlocks();\n        // try to parse APEv2 header\n        return tryParseApeHeader(this.metadata, this.tokenizer, this.options);\n    }\n    async parseWavPackBlocks() {\n        do {\n            const blockId = await this.tokenizer.peekToken(FourCcToken);\n            if (blockId !== 'wvpk')\n                break;\n            const header = await this.tokenizer.readToken(BlockHeaderToken);\n            if (header.BlockID !== 'wvpk')\n                throw new WavPackContentError('Invalid WavPack Block-ID');\n            debug(`WavPack header blockIndex=${header.blockIndex}, len=${BlockHeaderToken.len}`);\n            if (header.blockIndex === 0 && !this.metadata.format.container) {\n                this.metadata.setFormat('container', 'WavPack');\n                this.metadata.setFormat('lossless', !header.flags.isHybrid);\n                // tagTypes: this.type,\n                this.metadata.setFormat('bitsPerSample', header.flags.bitsPerSample);\n                if (!header.flags.isDSD) {\n                    // In case isDSD, these values will ne set in ID_DSD_BLOCK\n                    this.metadata.setFormat('sampleRate', header.flags.samplingRate);\n                    this.metadata.setFormat('duration', header.totalSamples / header.flags.samplingRate);\n                }\n                this.metadata.setFormat('numberOfChannels', header.flags.isMono ? 1 : 2);\n                this.metadata.setFormat('numberOfSamples', header.totalSamples);\n                this.metadata.setFormat('codec', header.flags.isDSD ? 'DSD' : 'PCM');\n            }\n            const ignoreBytes = header.blockSize - (BlockHeaderToken.len - 8);\n            await (header.blockIndex === 0 ? this.parseMetadataSubBlock(header, ignoreBytes) : this.tokenizer.ignore(ignoreBytes));\n            if (header.blockSamples > 0) {\n                this.audioDataSize += header.blockSize; // Count audio data for bit-rate calculation\n            }\n        } while (!this.tokenizer.fileInfo.size || this.tokenizer.fileInfo.size - this.tokenizer.position >= BlockHeaderToken.len);\n        if (this.metadata.format.duration) {\n            this.metadata.setFormat('bitrate', this.audioDataSize * 8 / this.metadata.format.duration);\n        }\n    }\n    /**\n     * Ref: http://www.wavpack.com/WavPack5FileFormat.pdf, 3.0 Metadata Sub-blocks\n     * @param header Header\n     * @param remainingLength Remaining length\n     */\n    async parseMetadataSubBlock(header, remainingLength) {\n        let remaining = remainingLength;\n        while (remaining > MetadataIdToken.len) {\n            const id = await this.tokenizer.readToken(MetadataIdToken);\n            const dataSizeInWords = await this.tokenizer.readNumber(id.largeBlock ? Token.UINT24_LE : Token.UINT8);\n            const data = new Uint8Array(dataSizeInWords * 2 - (id.isOddSize ? 1 : 0));\n            await this.tokenizer.readBuffer(data);\n            debug(`Metadata Sub-Blocks functionId=0x${id.functionId.toString(16)}, id.largeBlock=${id.largeBlock},data-size=${data.length}`);\n            switch (id.functionId) {\n                case 0x0: // ID_DUMMY: could be used to pad WavPack blocks\n                    break;\n                case 0xe: { // ID_DSD_BLOCK\n                    debug('ID_DSD_BLOCK');\n                    // https://github.com/dbry/WavPack/issues/71#issuecomment-483094813\n                    const mp = 1 << Token.UINT8.get(data, 0);\n                    const samplingRate = header.flags.samplingRate * mp * 8; // ToDo: second factor should be read from DSD-metadata block https://github.com/dbry/WavPack/issues/71#issuecomment-483094813\n                    if (!header.flags.isDSD)\n                        throw new WavPackContentError('Only expect DSD block if DSD-flag is set');\n                    this.metadata.setFormat('sampleRate', samplingRate);\n                    this.metadata.setFormat('duration', header.totalSamples / samplingRate);\n                    break;\n                }\n                case 0x24: // ID_ALT_TRAILER: maybe used to embed original ID3 tag header\n                    debug('ID_ALT_TRAILER: trailer for non-wav files');\n                    break;\n                case 0x26: // ID_MD5_CHECKSUM\n                    this.metadata.setFormat('audioMD5', data);\n                    break;\n                case 0x2f: // ID_BLOCK_CHECKSUM\n                    debug(`ID_BLOCK_CHECKSUM: checksum=${uint8ArrayToHex(data)}`);\n                    break;\n                default:\n                    debug(`Ignore unsupported meta-sub-block-id functionId=0x${id.functionId.toString(16)}`);\n                    break;\n            }\n            remaining -= MetadataIdToken.len + (id.largeBlock ? Token.UINT24_LE.len : Token.UINT8.len) + dataSizeInWords * 2;\n            debug(`remainingLength=${remaining}`);\n            if (id.isOddSize)\n                this.tokenizer.ignore(1);\n        }\n        if (remaining !== 0)\n            throw new WavPackContentError('metadata-sub-block should fit it remaining length');\n    }\n}\n//# sourceMappingURL=WavPackParser.js.map","import * as Token from 'token-types';\n/**\n * Common RIFF chunk header\n */\nexport const Header = {\n    len: 8,\n    get: (buf, off) => {\n        return {\n            // Group-ID\n            chunkID: new Token.StringType(4, 'latin1').get(buf, off),\n            // Size\n            chunkSize: Token.UINT32_LE.get(buf, off + 4)\n        };\n    }\n};\n/**\n * Token to parse RIFF-INFO tag value\n */\nexport class ListInfoTagValue {\n    constructor(tagHeader) {\n        this.tagHeader = tagHeader;\n        this.len = tagHeader.chunkSize;\n        this.len += this.len & 1; // if it is an odd length, round up to even\n    }\n    get(buf, off) {\n        return new Token.StringType(this.tagHeader.chunkSize, 'ascii').get(buf, off);\n    }\n}\n//# sourceMappingURL=RiffChunk.js.map","import * as Token from 'token-types';\nimport { makeUnexpectedFileContentError } from '../ParseError.js';\nexport class WaveContentError extends makeUnexpectedFileContentError('Wave') {\n}\n/**\n * Ref: https://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx\n */\nexport const WaveFormat = {\n    PCM: 0x0001,\n    // MPEG-4 and AAC Audio Types\n    ADPCM: 0x0002,\n    IEEE_FLOAT: 0x0003,\n    MPEG_ADTS_AAC: 0x1600,\n    MPEG_LOAS: 0x1602,\n    RAW_AAC1: 0x00FF,\n    // Dolby Audio Types\n    DOLBY_AC3_SPDIF: 0x0092,\n    DVM: 0x2000,\n    RAW_SPORT: 0x0240,\n    ESST_AC3: 0x0241,\n    DRM: 0x0009,\n    DTS2: 0x2001,\n    MPEG: 0x0050\n};\nexport const WaveFormatNameMap = {\n    [WaveFormat.PCM]: 'PCM',\n    [WaveFormat.ADPCM]: 'ADPCM',\n    [WaveFormat.IEEE_FLOAT]: 'IEEE_FLOAT',\n    [WaveFormat.MPEG_ADTS_AAC]: 'MPEG_ADTS_AAC',\n    [WaveFormat.MPEG_LOAS]: 'MPEG_LOAS',\n    [WaveFormat.RAW_AAC1]: 'RAW_AAC1',\n    [WaveFormat.DOLBY_AC3_SPDIF]: 'DOLBY_AC3_SPDIF',\n    [WaveFormat.DVM]: 'DVM',\n    [WaveFormat.RAW_SPORT]: 'RAW_SPORT',\n    [WaveFormat.ESST_AC3]: 'ESST_AC3',\n    [WaveFormat.DRM]: 'DRM',\n    [WaveFormat.DTS2]: 'DTS2',\n    [WaveFormat.MPEG]: 'MPEG'\n};\n/**\n * format chunk; chunk-id is \"fmt \"\n * http://soundfile.sapp.org/doc/WaveFormat/\n */\nexport class Format {\n    constructor(header) {\n        if (header.chunkSize < 16)\n            throw new WaveContentError('Invalid chunk size');\n        this.len = header.chunkSize;\n    }\n    get(buf, off) {\n        return {\n            wFormatTag: Token.UINT16_LE.get(buf, off),\n            nChannels: Token.UINT16_LE.get(buf, off + 2),\n            nSamplesPerSec: Token.UINT32_LE.get(buf, off + 4),\n            nAvgBytesPerSec: Token.UINT32_LE.get(buf, off + 8),\n            nBlockAlign: Token.UINT16_LE.get(buf, off + 12),\n            wBitsPerSample: Token.UINT16_LE.get(buf, off + 14)\n        };\n    }\n}\n/**\n * Fact chunk; chunk-id is \"fact\"\n * http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html\n * http://www.recordingblogs.com/wiki/fact-chunk-of-a-wave-file\n */\nexport class FactChunk {\n    constructor(header) {\n        if (header.chunkSize < 4) {\n            throw new WaveContentError('Invalid fact chunk size.');\n        }\n        this.len = header.chunkSize;\n    }\n    get(buf, off) {\n        return {\n            dwSampleLength: Token.UINT32_LE.get(buf, off)\n        };\n    }\n}\n//# sourceMappingURL=WaveChunk.js.map","import * as Token from 'token-types';\nimport { stripNulls } from '../common/Util.js';\n/**\n * Broadcast Audio Extension Chunk\n * Ref: https://tech.ebu.ch/docs/tech/tech3285.pdf\n */\nexport const BroadcastAudioExtensionChunk = {\n    len: 420,\n    get: (uint8array, off) => {\n        return {\n            description: stripNulls(new Token.StringType(256, 'ascii').get(uint8array, off)).trim(),\n            originator: stripNulls(new Token.StringType(32, 'ascii').get(uint8array, off + 256)).trim(),\n            originatorReference: stripNulls(new Token.StringType(32, 'ascii').get(uint8array, off + 288)).trim(),\n            originationDate: stripNulls(new Token.StringType(10, 'ascii').get(uint8array, off + 320)).trim(),\n            originationTime: stripNulls(new Token.StringType(8, 'ascii').get(uint8array, off + 330)).trim(),\n            timeReferenceLow: Token.UINT32_LE.get(uint8array, off + 338),\n            timeReferenceHigh: Token.UINT32_LE.get(uint8array, off + 342),\n            version: Token.UINT16_LE.get(uint8array, off + 346),\n            umid: new Token.Uint8ArrayType(64).get(uint8array, off + 348),\n            loudnessValue: Token.UINT16_LE.get(uint8array, off + 412),\n            maxTruePeakLevel: Token.UINT16_LE.get(uint8array, off + 414),\n            maxMomentaryLoudness: Token.UINT16_LE.get(uint8array, off + 416),\n            maxShortTermLoudness: Token.UINT16_LE.get(uint8array, off + 418)\n        };\n    }\n};\n//# sourceMappingURL=BwfChunk.js.map","import * as strtok3 from 'strtok3';\nimport * as Token from 'token-types';\nimport initDebug from 'debug';\nimport * as riff from '../riff/RiffChunk.js';\nimport * as WaveChunk from './WaveChunk.js';\nimport { ID3v2Parser } from '../id3v2/ID3v2Parser.js';\nimport * as util from '../common/Util.js';\nimport { FourCcToken } from '../common/FourCC.js';\nimport { BasicParser } from '../common/BasicParser.js';\nimport { BroadcastAudioExtensionChunk } from './BwfChunk.js';\nimport { WaveContentError } from './WaveChunk.js';\nconst debug = initDebug('music-metadata:parser:RIFF');\n/**\n * Resource Interchange File Format (RIFF) Parser\n *\n * WAVE PCM soundfile format\n *\n * Ref:\n * - http://www.johnloomis.org/cpe102/asgn/asgn1/riff.html\n * - http://soundfile.sapp.org/doc/WaveFormat\n *\n * ToDo: Split WAVE part from RIFF parser\n */\nexport class WaveParser extends BasicParser {\n    constructor() {\n        super(...arguments);\n        this.blockAlign = 0;\n    }\n    async parse() {\n        const riffHeader = await this.tokenizer.readToken(riff.Header);\n        debug(`pos=${this.tokenizer.position}, parse: chunkID=${riffHeader.chunkID}`);\n        if (riffHeader.chunkID !== 'RIFF')\n            return; // Not RIFF format\n        this.metadata.setAudioOnly();\n        return this.parseRiffChunk(riffHeader.chunkSize).catch(err => {\n            if (!(err instanceof strtok3.EndOfStreamError)) {\n                throw err;\n            }\n        });\n    }\n    async parseRiffChunk(chunkSize) {\n        const type = await this.tokenizer.readToken(FourCcToken);\n        this.metadata.setFormat('container', type);\n        switch (type) {\n            case 'WAVE':\n                return this.readWaveChunk(chunkSize - FourCcToken.len);\n            default:\n                throw new WaveContentError(`Unsupported RIFF format: RIFF/${type}`);\n        }\n    }\n    async readWaveChunk(remaining) {\n        while (remaining >= riff.Header.len) {\n            const header = await this.tokenizer.readToken(riff.Header);\n            remaining -= riff.Header.len + header.chunkSize;\n            if (header.chunkSize > remaining) {\n                this.metadata.addWarning('Data chunk size exceeds file size');\n            }\n            this.header = header;\n            debug(`pos=${this.tokenizer.position}, readChunk: chunkID=RIFF/WAVE/${header.chunkID}`);\n            switch (header.chunkID) {\n                case 'LIST':\n                    await this.parseListTag(header);\n                    break;\n                case 'fact': // extended Format chunk,\n                    this.metadata.setFormat('lossless', false);\n                    this.fact = await this.tokenizer.readToken(new WaveChunk.FactChunk(header));\n                    break;\n                case 'fmt ': { // The Util Chunk, non-PCM Formats\n                    const fmt = await this.tokenizer.readToken(new WaveChunk.Format(header));\n                    let subFormat = WaveChunk.WaveFormatNameMap[fmt.wFormatTag];\n                    if (!subFormat) {\n                        debug(`WAVE/non-PCM format=${fmt.wFormatTag}`);\n                        subFormat = `non-PCM (${fmt.wFormatTag})`;\n                    }\n                    this.metadata.setFormat('codec', subFormat);\n                    this.metadata.setFormat('bitsPerSample', fmt.wBitsPerSample);\n                    this.metadata.setFormat('sampleRate', fmt.nSamplesPerSec);\n                    this.metadata.setFormat('numberOfChannels', fmt.nChannels);\n                    this.metadata.setFormat('bitrate', fmt.nBlockAlign * fmt.nSamplesPerSec * 8);\n                    this.blockAlign = fmt.nBlockAlign;\n                    break;\n                }\n                case 'id3 ': // The way Picard, FooBar currently stores, ID3 meta-data\n                case 'ID3 ': { // The way Mp3Tags stores ID3 meta-data\n                    const id3_data = await this.tokenizer.readToken(new Token.Uint8ArrayType(header.chunkSize));\n                    const rst = strtok3.fromBuffer(id3_data);\n                    await new ID3v2Parser().parse(this.metadata, rst, this.options);\n                    break;\n                }\n                case 'data': { // PCM-data\n                    if (this.metadata.format.lossless !== false) {\n                        this.metadata.setFormat('lossless', true);\n                    }\n                    let chunkSize = header.chunkSize;\n                    if (this.tokenizer.fileInfo.size) {\n                        const calcRemaining = this.tokenizer.fileInfo.size - this.tokenizer.position;\n                        if (calcRemaining < chunkSize) {\n                            this.metadata.addWarning('data chunk length exceeding file length');\n                            chunkSize = calcRemaining;\n                        }\n                    }\n                    const numberOfSamples = this.fact ? this.fact.dwSampleLength : (chunkSize === 0xffffffff ? undefined : chunkSize / this.blockAlign);\n                    if (numberOfSamples) {\n                        this.metadata.setFormat('numberOfSamples', numberOfSamples);\n                        if (this.metadata.format.sampleRate) {\n                            this.metadata.setFormat('duration', numberOfSamples / this.metadata.format.sampleRate);\n                        }\n                    }\n                    if (this.metadata.format.codec === 'ADPCM') { // ADPCM is 4 bits lossy encoding resulting in 352kbps\n                        this.metadata.setFormat('bitrate', 352000);\n                    }\n                    else if (this.metadata.format.sampleRate) {\n                        this.metadata.setFormat('bitrate', this.blockAlign * this.metadata.format.sampleRate * 8);\n                    }\n                    await this.tokenizer.ignore(header.chunkSize);\n                    break;\n                }\n                case 'bext': { // Broadcast Audio Extension chunk\thttps://tech.ebu.ch/docs/tech/tech3285.pdf\n                    const bext = await this.tokenizer.readToken(BroadcastAudioExtensionChunk);\n                    Object.keys(bext).forEach(key => {\n                        this.metadata.addTag('exif', `bext.${key}`, bext[key]);\n                    });\n                    const bextRemaining = header.chunkSize - BroadcastAudioExtensionChunk.len;\n                    await this.tokenizer.ignore(bextRemaining);\n                    break;\n                }\n                case '\\x00\\x00\\x00\\x00': // padding ??\n                    debug(`Ignore padding chunk: RIFF/${header.chunkID} of ${header.chunkSize} bytes`);\n                    this.metadata.addWarning(`Ignore chunk: RIFF/${header.chunkID}`);\n                    await this.tokenizer.ignore(header.chunkSize);\n                    break;\n                default:\n                    debug(`Ignore chunk: RIFF/${header.chunkID} of ${header.chunkSize} bytes`);\n                    this.metadata.addWarning(`Ignore chunk: RIFF/${header.chunkID}`);\n                    await this.tokenizer.ignore(header.chunkSize);\n            }\n            if (this.header.chunkSize % 2 === 1) {\n                debug('Read odd padding byte'); // https://wiki.multimedia.cx/index.php/RIFF\n                await this.tokenizer.ignore(1);\n            }\n        }\n    }\n    async parseListTag(listHeader) {\n        const listType = await this.tokenizer.readToken(new Token.StringType(4, 'latin1'));\n        debug('pos=%s, parseListTag: chunkID=RIFF/WAVE/LIST/%s', this.tokenizer.position, listType);\n        switch (listType) {\n            case 'INFO':\n                return this.parseRiffInfoTags(listHeader.chunkSize - 4);\n            default:\n                this.metadata.addWarning(`Ignore chunk: RIFF/WAVE/LIST/${listType}`);\n                debug(`Ignoring chunkID=RIFF/WAVE/LIST/${listType}`);\n                return this.tokenizer.ignore(listHeader.chunkSize - 4).then();\n        }\n    }\n    async parseRiffInfoTags(chunkSize) {\n        while (chunkSize >= 8) {\n            const header = await this.tokenizer.readToken(riff.Header);\n            const valueToken = new riff.ListInfoTagValue(header);\n            const value = await this.tokenizer.readToken(valueToken);\n            this.addTag(header.chunkID, util.stripNulls(value));\n            chunkSize -= (8 + valueToken.len);\n        }\n        if (chunkSize !== 0) {\n            throw new WaveContentError(`Illegal remaining size: ${chunkSize}`);\n        }\n    }\n    addTag(id, value) {\n        this.metadata.addTag('exif', id, value);\n    }\n}\n//# sourceMappingURL=WaveParser.js.map"],"names":["exports","s","a","o","h","u","r","e","require","l","n","Error","code","i","call","length","t","d","c","p","encode","f","getTypeOf","charCodeAt","push","charAt","join","decode","substr","replace","uint8array","Uint8Array","Array","indexOf","this","compressedSize","uncompressedSize","crc32","compression","compressedContent","prototype","getContentWorker","Promise","resolve","pipe","uncompressWorker","on","streamInfo","data_length","getCompressedWorker","withStreamInfo","createWorkerFrom","compressWorker","STORE","magic","DEFLATE","base64","binary","dir","createFolders","date","compressionOptions","comment","unixPermissions","dosPermissions","lie","Uint16Array","Uint32Array","_pako","_pakoAction","_pakoOptions","meta","inherits","processChunk","_createPako","transformTo","data","flush","cleanUp","raw","level","onData","pako","A","String","fromCharCode","file","O","utf8encode","I","name","m","_","g","b","v","y","w","k","x","S","z","C","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCFullYear","getUTCMonth","getUTCDate","B","E","fileRecord","R","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","bytesWritten","zipComment","zipPlatform","encodeFileName","streamFiles","accumulate","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","percent","openedSource","closedSource","DATA_DESCRIPTOR","shift","CENTRAL_DIRECTORY_END","prepareNextSource","previous","isPaused","pause","resume","registerPrevious","end","error","generatedError","lock","generateWorker","platform","forEach","options","_compressWorker","arguments","files","Object","create","root","clone","loadAsync","support","defaults","version","external","decompressed","extend","checkCRC32","optimizedBinaryString","decodeFileName","utf8decode","isNode","isStream","reject","prepareContent","then","load","all","fileNameStr","fileCommentStr","unsafeOriginalName","_upstreamEnded","_bindStream","_stream","Readable","_helper","emit","_read","Buffer","newBufferFrom","from","allocBuffer","alloc","fill","isBuffer","Date","toUpperCase","parseInt","slice","substring","lastIndexOf","toString","filter","test","folder","remove","generate","generateInternalStream","type","mimeType","toLowerCase","checkSupport","generateAsync","generateNodeStream","toNodejsStream","stream","byteAt","zero","lastIndexOfSignature","readAndCheckSignature","readData","checkOffset","index","checkIndex","setIndex","skip","readInt","readString","readDate","UTC","subarray","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","destType","propName","dataIsReady","max","_tickScheduled","_tickAndRepeat","delay","isFinished","_tick","Math","min","extraStreamInfo","isLocked","_listeners","mergeStreamInfo","hasOwnProperty","nodestream","_internalType","_outputType","_mimeType","_worker","newBlob","concat","apply","set","objectMode","array","string","arraybuffer","ArrayBuffer","nodebuffer","blob","Blob","size","self","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","append","getBlob","leftOver","applyFromCharCode","Utf8DecodeWorker","Utf8EncodeWorker","stringifyByChunk","stringifyByChar","applyCanBeUsed","floor","buffer","byteLength","split","pop","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","setImmediate","FileReader","onload","target","result","onerror","readAsArrayBuffer","setimmediate","loadOptions","checkSignature","reader","isSignature","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","id","value","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","abs","prepareReader","isEncrypted","bitFlag","useUTF8","fileNameLength","fileName","compressionMethod","versionMadeBy","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","extraFields","findExtraFieldUnicodePath","findExtraFieldUnicodeComment","_data","_dataBinary","internalStream","_decompressWorker","async","nodeStream","MutationObserver","WebKitMutationObserver","document","createTextNode","observe","characterData","MessageChannel","createElement","onreadystatechange","parentNode","removeChild","documentElement","appendChild","setTimeout","port1","onmessage","port2","postMessage","global","window","TypeError","state","queue","outcome","promise","onFulfilled","callFulfilled","otherCallFulfilled","onRejected","callRejected","otherCallRejected","status","finally","constructor","catch","race","immediate","assign","method","chunkSize","windowBits","memLevel","strategy","to","gzip","err","msg","ended","chunks","strm","avail_out","deflateInit2","header","deflateSetHeader","dictionary","string2buf","deflateSetDictionary","_dict_set","input","next_in","avail_in","output","Buf8","next_out","deflate","onEnd","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","Deflate","deflateRaw","inflateInit2","Z_OK","inflateGetHeader","Z_FINISH","Z_NO_FLUSH","binstring2buf","inflate","Z_NEED_DICT","inflateSetDictionary","Z_BUF_ERROR","Z_STREAM_END","Z_SYNC_FLUSH","utf8border","buf2string","arraySet","inflateEnd","Inflate","inflateRaw","ungzip","Int32Array","setTyped","Buf16","Buf32","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","T","D","F","pending","pending_buf","pending_out","total_out","N","_tr_flush_block","block_start","strstart","U","P","L","max_chain_length","prev_length","nice_match","w_size","w_mask","prev","good_match","lookahead","match_start","j","window_size","hash_size","head","wrap","adler","total_in","insert","ins_h","hash_shift","hash_mask","Z","match_length","_tr_tally","max_lazy_match","last_lit","W","prev_match","match_available","M","good_length","max_lazy","nice_length","max_chain","func","H","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","depth","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","G","data_type","_tr_init","K","Y","deflateInit","deflateReset","deflateResetKeep","text","hcrc","extra","time","os","_tr_align","_tr_stored_block","deflateInfo","xflags","extra_len","done","dmax","wsize","whave","wnext","hold","bits","lencode","distcode","lenbits","distbits","mode","sane","last","havedict","flags","check","total","wbits","offset","ncode","nlen","ndist","have","next","lens","work","lendyn","distdyn","back","was","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInfo","static_tree","extra_bits","extra_base","elems","max_length","has_stree","dyn_tree","max_code","stat_desc","X","V","q","J","getPrototypeOf","process","nextTick","importScripts","random","addEventListener","attachEvent","Function","callback","args","clearImmediate","source","EndOfStreamError","super","AbortError","message","AbstractStreamReader","endOfStream","interrupted","peekQueue","peek","uint8Array","mayBeLess","bytesRead","read","readFromPeekBuffer","readRemainderFromStream","remaining","peekData","lenCopy","chunkLen","readFromStream","WebStreamReader","abort","close","releaseLock","WebStreamByobReader","undefined","WebStreamDefaultReader","writeChunk","chunk","written","totalBytesRead","cancel","AbstractTokenizer","numBuffer","position","onClose","abortSignal","readToken","token","len","readBuffer","get","peekToken","peekBuffer","readNumber","peekNumber","ignore","fileInfo","bytesLeft","normalizeOptions","supportsRandomAccess","ReadStreamTokenizer","streamReader","normOptions","skipBytes","skipBuffer","bufSize","buf","totBytesRead","BufferTokenizer","bytes2read","setPosition","fromWebStream","webStream","webStreamReader","getReader","ReadableStreamDefaultReader","makeWebStreamReader","_options","chainedClose","fromBuffer","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","Infinity","pow","write","rt","isNaN","log","LN2","dv","DataView","byteOffset","UINT8","getUint8","put","setUint8","UINT16_LE","getUint16","setUint16","UINT16_BE","UINT24_LE","dataView","UINT24_BE","UINT32_LE","getUint32","setUint32","UINT32_BE","INT8","getInt8","setInt8","INT16_BE","getInt16","setInt16","INT16_LE","INT24_LE","unsigned","INT24_BE","INT32_BE","getInt32","setInt32","INT32_LE","UINT64_LE","getBigUint64","setBigUint64","INT64_LE","getBigInt64","setBigInt64","UINT64_BE","INT64_BE","Float16_BE","ieee754.read","ieee754.write","Float16_LE","Float32_BE","getFloat32","setFloat32","Float32_LE","Float64_BE","getFloat64","setFloat64","Float64_LE","Float80_BE","Float80_LE","Uint8ArrayType","StringType","encoding","decoder","decodeWindows1252","textDecoder","TextDecoder","bytes","byte","win1252Map","_array","_off","u8","u16","i32","fleb","fdeb","clim","freb","eb","start","_a","fl","revfl","fd","rev","hMap","cd","mb","co","le","rvb","sv","r_1","flt","fdt","flrm","fdrm","bits16","shft","ec","ind","nt","captureStackTrace","inflt","dat","st","dict","sl","noBuf","resize","noSt","cbuf","bl","nbuf","final","pos","bt","lm","dm","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","dt","lms","dms","lpos","sym","add","dsym","dend","slc","et","decompressSync","opts","flg","zs","gzs","gzl","gunzipSync","inflateSync","zls","unzlibSync","td","common","env","createDebug","namespace","prevTime","namespacesCache","enabledCache","enableOverride","debug","enabled","curr","Number","ms","diff","coerce","unshift","match","format","formatter","formatters","val","splice","formatArgs","useColors","color","selectColor","destroy","defineProperty","enumerable","configurable","namespaces","init","delimiter","newDebug","matchesTemplate","search","template","searchIndex","templateIndex","starIndex","matchIndex","default","stack","disable","names","skips","map","enable","save","trim","Boolean","ns","humanize","plural","msAbs","isPlural","round","str","exec","parseFloat","parse","isFinite","long","fmtLong","fmtShort","JSON","stringify","require$$0","keys","key","hash","colors","module","lastC","storage","setItem","removeItem","getItem","DEBUG","__nwjs","navigator","userAgent","style","WebkitAppearance","console","firebug","exception","table","localStorage","localstorage","warned","Signature","DataDescriptor","signature","LocalFileHeaderToken","minVersion","dataDescriptor","compressedMethod","filenameLength","extraFieldLength","filename","EndOfCentralDirectoryRecordToken","nrOfThisDisk","nrOfThisDiskWithTheStart","nrOfEntriesOnThisDisk","nrOfEntriesOfSize","sizeOfCd","offsetOfStartOfCd","zipFileCommentLength","FileHeader","relativeOffsetOfLocalHeader","signatureToArray","signatureBytes","initDebug","syncBufferSize","ddSignatureArray","eocdSignatureBytes","ZipHandler","tokenizer","syncBuffer","isZip","peekSignature","findEndOfCentralDirectoryLocator","randomReadTokenizer","chunkLength","readCentralDirectory","eocdHeader","entry","unzip","fileCb","entries","iterateOverCentralDirectory","stop","zipHeader","readLocalFileHeader","fileData","nextHeaderIndex","handler","mergeArrays","fileHeader","cb","portion","bufferLength","portionLength","found","totalLength","reduce","acc","mergedArray","objectToString","isType","typeConstructor","typeStringified","isUint8Array","cachedDecoders","utf8","globalThis","uint8ArrayToString","isArrayBuffer","isUint8ArrayOrArrayBuffer","assertUint8ArrayOrArrayBuffer","assertString","cachedEncoder","TextEncoder","byteToHexLookupTable","padStart","uint8ArrayToHex","assertUint8Array","hexString","hexToDecimalLookupTable","hexToUint8Array","resultLength","highNibble","lowNibble","getUintBE","view","uint32SyncSafeToken","reasonableDetectionSizeInBytes","fileTypeFromBuffer","FileTypeParser","getFileTypeFromMimeType","ext","mime","_check","headers","mask","mpegOffsetTolerance","detectors","customDetectors","detect","detectConfident","detectImprecise","tokenizerOptions","signal","fromTokenizer","initialPosition","detector","fileType","strtok3.fromBuffer","fromBlob","fromStream","strtok3.fromWebStream","toDetectionStream","sampleSize","detectedFileType","firstChunk","strtok3.EndOfStreamError","transformStream","TransformStream","controller","enqueue","transform","newStream","pipeThrough","checkString","character","MAX_SAFE_INTEGER","id3HeaderLength","xmlContent","endPos","includes","firstPos","readTiffHeader","readField","msb","Token.UINT8","ic","readElement","idField","lengthField","nrLength","idView","lengthView","readChildren","children","element","Token.StringType","replaceAll","re","some","char7","readChunkHeader","Token.INT32_BE","brandMajor","startsWith","readHeader","guid","Token.UINT64_LE","payload","typeId","jsonSize","arrayBuffer","readSum","sum","tarHeaderChecksumMatches","scanMpeg","readTiffTag","bigEndian","tagId","Token.UINT16_BE","Token.UINT16_LE","readTiffIFD","numberOfTags","ifdOffset","Token.UINT32_BE","Token.UINT32_LE","someId1","someId2","Set","PARAM_REGEXP","TEXT_REGEXP","TOKEN_REGEXP","QESC_REGEXP","QUOTE_REGEXP","TYPE_REGEXP","qstring","ContentType","parameters","contentType","obj","param","params","sort","getHeader","getcontenttype","lastIndex","MediaType","subtype","suffix","TargetType","TrackType","TrackTypeValueToKeyMap","TrackType_video","TrackType_audio","TrackType_complex","TrackType_logo","TrackType_subtitle","TrackType_button","TrackType_control","makeParseError","CouldNotDetermineFileTypeError","UnsupportedFileTypeError","UnexpectedFileContentError","FieldDecodingError","InternalParserError","makeUnexpectedFileContentError","getBit","off","bit","findZero","trimRightNull","pos0","decodeString","swapBytes","stripNulls","getBitAllignedNumber","bitOffset","bitOff","bitsRead","bitsLeft","isBitSet","AttachedPictureType","LyricsContentType","other","lyrics","movement_part","events","chord","trivia_pop","TimestampFormat","notSynchronized0","mpegFrameNumber","milliseconds","UINT32SYNCSAFE","ID3v2Header","fileIdentifier","major","Token.INT8","revision","unsynchronisation","util.getBit","isExtendedHeader","expIndicator","footer","ExtendedHeader","extendedFlags","sizeOfPadding","crcDataPresent","TextEncodingToken","bom","TextHeader","language","defaultTagInfo","multiple","commonTags","year","track","disk","title","artist","artists","unique","albumartist","album","originaldate","originalyear","releasedate","genre","picture","composer","albumsort","titlesort","artistsort","albumartistsort","composersort","lyricist","writer","conductor","remixer","arranger","engineer","producer","technician","djmixer","mixer","label","grouping","subtitle","discsubtitle","totaltracks","totaldiscs","compilation","rating","bpm","mood","media","catalognumber","tvShow","tvShowSort","tvSeason","tvEpisode","tvEpisodeId","tvNetwork","podcast","podcasturl","releasestatus","releasetype","releasecountry","script","copyright","license","encodedby","encodersettings","gapless","barcode","isrc","asin","musicbrainz_recordingid","musicbrainz_trackid","musicbrainz_albumid","musicbrainz_artistid","musicbrainz_albumartistid","musicbrainz_releasegroupid","musicbrainz_workid","musicbrainz_trmid","musicbrainz_discid","acoustid_id","acoustid_fingerprint","musicip_puid","musicip_fingerprint","website","averageLevel","peakLevel","notes","originalalbum","originalartist","discogs_artist_id","discogs_release_id","discogs_label_id","discogs_master_release_id","discogs_votes","discogs_rating","replaygain_track_peak","replaygain_track_gain","replaygain_album_peak","replaygain_album_gain","replaygain_track_minmax","replaygain_album_minmax","replaygain_undo","description","longDescription","category","hdVideo","keywords","movement","movementIndex","movementTotal","podcastId","showMovement","stik","CommonTagMapper","toIntOrNull","cleaned","normalizeTrack","origVal","no","of","tagTypes","tagMap","mapGenericTag","tag","warnings","postMap","getCommonName","_tag","_warnings","maxRatingScore","id3v1TagMap","ID3v1TagMapper","CaseInsensitiveTagMap","upperCaseMap","id3v24TagMap","TIT2","TPE1","TPE2","TALB","TDRV","TORY","TPOS","TCON","APIC","TCOM","USLT","TSOA","TSOT","TOAL","TSOP","TSO2","TSOC","TEXT","TPE3","TPE4","TPUB","TIT1","TIT3","TRCK","TCMP","POPM","TBPM","TMED","TLAN","TCOP","WCOP","TENC","TSSE","TSRC","WOAR","TDRC","TYER","TDOR","TMOO","SYLT","TSST","TKEY","COMM","TOPE","MVNM","MVIN","PCST","TCAT","TDES","TDRL","TGID","TKWD","WFED","GRP1","ID3v24TagMapper","toRating","popm","email","idTag","owner_identifier","identifier","customTag","addWarning","asfTagMap","Title","Author","Description","Copyright","LICENSE","ASIN","AsfTagMapper","id3v22TagMap","TT2","TP1","TP2","TAL","TYE","COM","TRK","TPA","TCO","PIC","TCM","TOR","TOT","TXT","TP3","TPB","TT1","TT3","TLA","TCR","WCP","TEN","TSS","WAR","PCS","TCP","TDR","TS2","TSA","TSC","TSP","TST","WFD","TBP","ID3v22TagMapper","apev2TagMap","Artist","Artists","Album","Year","Originalyear","Originaldate","Releasedate","Comment","Track","Disc","DISCNUMBER","Genre","Composer","Lyrics","ALBUMSORT","TITLESORT","WORK","ARTISTSORT","ALBUMARTISTSORT","COMPOSERSORT","Lyricist","Writer","Conductor","MixArtist","Arranger","Engineer","Producer","DJMixer","Mixer","Label","Grouping","Subtitle","DiscSubtitle","Compilation","BPM","Mood","Media","CatalogNumber","MUSICBRAINZ_ALBUMSTATUS","MUSICBRAINZ_ALBUMTYPE","RELEASECOUNTRY","Script","Language","EncodedBy","EncoderSettings","Barcode","ISRC","musicbrainz_releasetrackid","MUSICBRAINZ_ALBUMID","MUSICBRAINZ_ARTISTID","MUSICBRAINZ_ALBUMARTISTID","MUSICBRAINZ_RELEASEGROUPID","MUSICBRAINZ_WORKID","MUSICBRAINZ_TRMID","MUSICBRAINZ_DISCID","Acoustid_Id","ACOUSTID_FINGERPRINT","MUSICIP_PUID","Weblink","REPLAYGAIN_TRACK_GAIN","REPLAYGAIN_TRACK_PEAK","MP3GAIN_MINMAX","MP3GAIN_UNDO","APEv2TagMapper","mp4TagMap","aART","trkn","covr","soal","sonm","soar","soaa","soco","cpil","tmpo","tvsh","tvsn","tves","sosn","tven","tvnn","pcst","purl","cprt","pgap","gnre","desc","ldes","catg","egid","hdvd","keyw","shwm","rate","MP4TagMapper","vorbisTagMap","TITLE","ARTIST","ARTISTS","ALBUMARTIST","ALBUM","DATE","ORIGINALDATE","ORIGINALYEAR","RELEASEDATE","COMMENT","TRACKNUMBER","GENRE","METADATA_BLOCK_PICTURE","COMPOSER","LYRICS","LYRICIST","WRITER","CONDUCTOR","REMIXER","ARRANGER","ENGINEER","PRODUCER","DJMIXER","MIXER","LABEL","GROUPING","SUBTITLE","DISCSUBTITLE","TRACKTOTAL","DISCTOTAL","COMPILATION","RATING","KEY","MOOD","MEDIA","CATALOGNUMBER","RELEASESTATUS","RELEASETYPE","SCRIPT","LANGUAGE","COPYRIGHT","ENCODEDBY","ENCODERSETTINGS","BARCODE","MUSICBRAINZ_TRACKID","MUSICBRAINZ_RELEASETRACKID","ACOUSTID_ID","ACOUSTID_ID_FINGERPRINT","WEBSITE","NOTES","TOTALTRACKS","TOTALDISCS","DISCOGS_ARTIST_ID","DISCOGS_ARTISTS","DISCOGS_ARTIST_NAME","DISCOGS_ALBUM_ARTISTS","DISCOGS_CATALOG","DISCOGS_COUNTRY","DISCOGS_DATE","DISCOGS_LABEL","DISCOGS_LABEL_ID","DISCOGS_MASTER_RELEASE_ID","DISCOGS_RATING","DISCOGS_RELEASED","DISCOGS_RELEASE_ID","DISCOGS_VOTES","CATALOGID","STYLE","REPLAYGAIN_ALBUM_GAIN","REPLAYGAIN_ALBUM_PEAK","REPLAYGAIN_MINMAX","REPLAYGAIN_ALBUM_MINMAX","REPLAYGAIN_UNDO","VorbisTagMapper","maxScore","riffInfoTagMap","IART","ICRD","INAM","TITL","IPRD","ITRK","IPRT","ICMT","ICNT","GNRE","IWRI","RATE","YEAR","ISFT","CODE","TURL","IGNR","IENG","ITCH","IMED","IRPD","RiffInfoTagMapper","ebmlTagMap","MatroskaTagMapper","NAME","AUTH","ANNO","AiffTagMapper","CombinedTagMapper","tagMappers","mapper","registerTagMapper","mapTag","tagType","genericTagMapper","TagPriority","MetadataCollector","trackInfo","native","quality","commonOrigin","originPriority","tagMapper","priority","artificial","id3v1","hasAny","addStreamInfo","codecName","setFormat","observer","metadata","setAudioOnly","addTag","toCommon","warning","setGenericTag","artistTag","postFixPicture","ps","dB","ratio","log10","toRatio","minMix","leftChannel","rightChannel","commonTag","descriptor","lrcString","lines","syncText","timestampRegex","line","minutes","seconds","millisecondsStr","timestamp","timeStampFormat","parseLrc","toCommonMetadata","toLocaleLowerCase","genericTag","prio0","prio1","alias","isUnique","mpegParserLoader","parserType","extensions","mimeTypes","MpegParser$1","MpegParser","apeParserLoader","APEv2Parser$1","APEv2Parser","asfParserLoader","AsfParser$1","AsfParser","dsdiffParserLoader","DsdiffParser$1","DsdiffParser","aiffParserLoader","AiffParser","AIFFParser","dsfParserLoader","DsfParser$1","DsfParser","flacParserLoader","FlacParser$1","FlacParser","matroskaParserLoader","MatroskaParser$1","MatroskaParser","mp4ParserLoader","MP4Parser$1","MP4Parser","musepackParserLoader","MusepackParser$1","MusepackParser","oggParserLoader","OggParser$1","OggParser","wavpackParserLoader","WavPackParser$1","WavPackParser","riffParserLoader","WaveParser$1","WaveParser","ParserFactory","parsers","parser","registerParser","parserLoader","scanAppendingHeaders","findLoaderForContentType","path","findLoaderForExtension","guessedType","hasAudio","find","hasVideo","filePath","extension","fname","getExtension","httpContentType","mimeTypeParse","parseHttpContentType","_err","subType","loader","getSupportedMimeTypes","mimeTypeSet","BasicParser","validFourCC","FourCcToken","arr","hex","util.a2hex","DescriptorParser","ID","descriptorBytes","headerBytes","seekTableBytes","headerDataBytes","apeFrameDataBytes","apeFrameDataBytesHigh","terminatingDataBytes","fileMD5","Token.Uint8ArrayType","Header","compressionLevel","formatFlags","blocksPerFrame","finalFrameBlocks","totalFrames","bitsPerSample","channel","sampleRate","TagFooter","fields","parseTagFlags","TagItemHeader","containsHeader","containsFooter","isHeader","readOnly","dataType","num","tagFormat","preamble","ApeContentError","tryParseApeHeader","ape","calculateDuration","ah","duration","findApeFooterOffset","apeBuf","tagFooter","parseTagFooter","parseTags","lenExp","parseDescriptorExpansion","parseHeader","forwardBytes","keyBuffer","bytesRemaining","tagItemHeader","util.findZero","values","skipCovers","picData","Genres","Iid3v1Token","Id3v1StringType","zeroByte","stringType","util.trimRightNull","ID3v1Parser","apeHeader","getGenre","genreIndex","apeParser","props","endTag2","parseWebStream","parseFromTokenizer","apeOffset","hasID3v1Header","lyricsLen","fileSize","txt","getLyricsHeaderLength","nativeTags","tags","File","_filePath","_fileInfo","pictures","cur","REACT_ELEMENT_TYPE","Symbol","for","REACT_FRAGMENT_TYPE","jsxProd","config","maybeKey","ref","$$typeof","reactJsxRuntime_production","Fragment","jsx","jsxs","jsxRuntimeModule","node","parentIndex","parent","compare","first","halfLength","leftIndex","left","rightIndex","right","sortIndex","unstable_now","performance","now","localPerformance","localDate","initialTime","taskQueue","timerQueue","taskIdCounter","currentTask","currentPriorityLevel","isPerformingWork","isHostCallbackScheduled","isHostTimeoutScheduled","needsPaint","localSetTimeout","localClearTimeout","clearTimeout","localSetImmediate","advanceTimers","currentTime","timer","startTime","expirationTime","handleTimeout","isMessageLoopRunning","schedulePerformWorkUntilDeadline","firstTimer","requestHostTimeout","taskTimeoutID","frameInterval","shouldYieldToHost","performWorkUntilDeadline","hasMoreWork","previousPriorityLevel","priorityLevel","continuationCallback","port","unstable_IdlePriority","unstable_ImmediatePriority","unstable_LowPriority","unstable_NormalPriority","unstable_Profiling","unstable_UserBlockingPriority","unstable_cancelCallback","task","unstable_forceFrameRate","fps","unstable_getCurrentPriorityLevel","unstable_next","eventHandler","unstable_requestPaint","unstable_runWithPriority","unstable_scheduleCallback","timeout","unstable_shouldYield","unstable_wrapCallback","parentPriorityLevel","schedulerModule","REACT_PORTAL_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","MAYBE_ITERATOR_SYMBOL","iterator","ReactNoopUpdateQueue","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","emptyObject","Component","context","updater","refs","ComponentDummy","PureComponent","isReactComponent","setState","partialState","forceUpdate","pureComponentPrototype","isPureReactComponent","isArrayImpl","isArray","ReactSharedInternals","ReactElement","owner","isValidElement","object","userProvidedKeyEscapeRegex","getElementKey","escaperLookup","escape","noop$1","mapIntoArray","escapedPrefix","nameSoFar","oldElement","newKey","invokeCallback","_init","_payload","maybeIterable","nextNamePrefix","thenable","reason","fulfilledValue","resolveThenable","mapChildren","count","child","lazyInitializer","_status","ctor","_result","moduleObject","reportGlobalError","reportError","ErrorEvent","event","bubbles","cancelable","dispatchEvent","noop","react_production","Children","forEachFunc","forEachContext","toArray","only","Profiler","StrictMode","Suspense","__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","__COMPILER_RUNTIME","__proto__","useMemoCache","cache","fn","cloneElement","childArray","createContext","defaultValue","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","childrenLength","defaultProps","createRef","current","forwardRef","render","lazy","memo","startTransition","scope","prevTransition","currentTransition","returnValue","onStartTransitionFinish","unstable_useCacheRefresh","useCacheRefresh","use","usable","useActionState","action","initialState","permalink","useCallback","deps","useContext","Context","useDebugValue","useDeferredValue","initialValue","useEffect","createDeps","update","dispatcher","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useOptimistic","passthrough","reducer","useReducer","initialArg","useRef","useState","useSyncExternalStore","subscribe","getSnapshot","getServerSnapshot","useTransition","reactModule","React","formatProdErrorMessage","url","encodeURIComponent","Internals","findDOMNode","getCrossOriginStringAs","as","reactDom_production","__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","createPortal","container","nodeType","containerInfo","implementation","createPortal$1","flushSync","previousTransition","previousUpdatePriority","preconnect","href","crossOrigin","prefetchDNS","preinit","integrity","fetchPriority","precedence","nonce","preinitModule","preload","referrerPolicy","imageSrcSet","imageSizes","preloadModule","requestFormReset","form","unstable_batchedUpdates","useFormState","useFormStatus","useHostTransitionStatus","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","reactDomModule","Scheduler","require$$1","ReactDOM","require$$2","isValidContainer","getNearestMountedFiber","fiber","nearestMounted","alternate","return","getSuspenseInstanceFromFiber","suspenseState","memoizedState","dehydrated","assertIsMounted","findCurrentHostFiberImpl","sibling","REACT_LEGACY_ELEMENT_TYPE","REACT_PROVIDER_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_MEMO_CACHE_SENTINEL","getIteratorFn","REACT_CLIENT_REFERENCE","getComponentNameFromType","displayName","innerType","ReactDOMSharedInternals","sharedNotPendingObject","valueStack","createCursor","cursor","contextStackCursor","contextFiberStackCursor","rootInstanceStackCursor","hostTransitionProviderCursor","pushHostContainer","nextRootInstance","namespaceURI","getOwnHostContext","tagName","getChildHostContextProd","popHostContainer","pushHostContext","JSCompiler_inline_result","popHostContext","HostTransitionContext","scheduleCallback$3","cancelCallback$1","shouldYield","requestPaint","getCurrentPriorityLevel","ImmediatePriority","UserBlockingPriority","NormalPriority$1","LowPriority","IdlePriority","log$1","unstable_setDisableYieldValue","rendererID","injectedHook","setIsStrictModeForDevtools","newIsStrictMode","setStrictMode","clz32","nextTransitionLane","nextRetryLane","getHighestPriorityLanes","lanes","pendingSyncLanes","getNextLanes","wipLanes","rootHasPendingCommit","pendingLanes","nextLanes","suspendedLanes","pingedLanes","warmLanes","nonIdlePendingLanes","checkIfRootIsPrerendering","renderLanes","computeExpirationTime","lane","claimNextTransitionLane","claimNextRetryLane","createLaneMap","initial","laneMap","markRootUpdated$1","updateLane","markSpawnedDeferredLane","spawnedLane","entangledLanes","spawnedLaneIndex","entanglements","markRootEntangled","rootEntangledLanes","index$6","getBumpedLaneForHydrationByLane","lanesToEventPriority","resolveUpdatePriority","updatePriority","getEventPriority","randomKey","internalInstanceKey","internalPropsKey","internalContainerInstanceKey","internalEventHandlersKey","internalEventHandlerListenersKey","internalEventHandlesSetKey","internalRootNodeResourcesKey","internalHoistableMarker","detachDeletedInstance","getClosestInstanceFromNode","targetNode","targetInst","getParentSuspenseInstance","getInstanceFromNode","getNodeFromInstance","inst","stateNode","getResourcesFromRoot","resources","hoistableStyles","Map","hoistableScripts","markNodeAsHoistable","allNativeEvents","registrationNameDependencies","registerTwoPhaseEvent","registrationName","dependencies","registerDirectEvent","prefix","VALID_ATTRIBUTE_NAME_REGEX","RegExp","illegalAttributeNameCache","validatedAttributeNameCache","setValueForAttribute","attributeName","removeAttribute","prefix$8","setAttribute","setValueForKnownAttribute","setValueForNamespacedAttribute","setAttributeNS","describeBuiltInComponentFrame","reentry","describeNativeComponentFrame","construct","previousPrepareStackTrace","prepareStackTrace","RunInRootFrame","DetermineComponentFrameRoot","Fake","Reflect","control","x$9","x$10","sample","namePropDescriptor","getOwnPropertyDescriptor","_RunInRootFrame$Deter","sampleStack","controlStack","sampleLines","controlLines","frame","describeFiber","getStackByFiberInDevAndProd","workInProgress","info","getToStringValue","isCheckable","elem","nodeName","_valueTracker","valueField","currentValue","getValue","setValue","stopTracking","trackValueOnNode","updateValueIfChanged","tracker","lastValue","checked","getActiveElement","doc","activeElement","body","escapeSelectorAttributeValueInsideDoubleQuotesRegex","escapeSelectorAttributeValueInsideDoubleQuotes","ch","updateInput","lastDefaultValue","defaultChecked","setDefaultValue","initInput","isHydrating","ownerDocument","updateOptions","propValue","setDefaultSelected","selected","defaultSelected","disabled","updateTextarea","initTextarea","textContent","setTextContent","firstChild","lastChild","nodeValue","unitlessNumbers","setValueForStyle","styleName","isCustomProperty","setProperty","cssFloat","has","setValueForStyles","styles","prevStyles","styleName$16","styleName$17","isCustomElement","aliases","isJavaScriptProtocol","sanitizeURL","currentReplayingEvent","getEventTarget","nativeEvent","srcElement","correspondingUseElement","restoreTarget","restoreQueue","restoreStateOfTarget","internalInstance","querySelectorAll","otherNode","otherProps","isInsideEventHandler","batchedUpdates$1","flushSyncWork$1","getListener","canUseDOM","passiveBrowserEventsSupported","removeEventListener","startText","fallbackText","getData","startValue","startLength","endValue","endLength","minEnd","getEventCharCode","keyCode","charCode","functionThatReturnsTrue","functionThatReturnsFalse","createSyntheticEvent","Interface","SyntheticBaseEvent","reactName","reactEventType","nativeEventTarget","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","isPropagationStopped","preventDefault","stopPropagation","cancelBubble","persist","isPersistent","lastMovementX","lastMovementY","lastMouseEvent","EventInterface","eventPhase","timeStamp","isTrusted","SyntheticEvent","UIEventInterface","detail","SyntheticUIEvent","MouseEventInterface","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","getEventModifierState","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","SyntheticMouseEvent","SyntheticDragEvent","dataTransfer","SyntheticFocusEvent","SyntheticAnimationEvent","animationName","elapsedTime","pseudoElement","SyntheticClipboardEvent","clipboardData","SyntheticCompositionEvent","normalizeKey","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","translateToKey","modifierKeyToProp","Alt","Control","Meta","Shift","modifierStateGetter","keyArg","KeyboardEventInterface","location","repeat","locale","which","SyntheticKeyboardEvent","SyntheticPointerEvent","pointerId","width","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","SyntheticTouchEvent","touches","targetTouches","changedTouches","SyntheticTransitionEvent","propertyName","SyntheticWheelEvent","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","SyntheticToggleEvent","newState","oldState","END_KEYCODES","canUseCompositionEvent","documentMode","canUseTextInputEvent","useFallbackCompositionData","SPACEBAR_CHAR","hasSpaceKeypress","isFallbackCompositionEnd","domEventName","getDataFromCustomEvent","isComposing","supportedInputTypes","datetime","month","number","password","range","tel","week","isTextInputElement","createAndAccumulateChangeEvent","dispatchQueue","accumulateTwoPhaseListeners","listeners","activeElement$1","activeElementInst$1","runEventInBatch","processDispatchQueue","getInstIfValueChanged","getTargetInstForChangeEvent","isInputEventSupported","JSCompiler_inline_result$jscomp$282","isSupported$jscomp$inline_417","element$jscomp$inline_418","oninput","stopWatchingForValueChange","detachEvent","handlePropertyChange","handleEventsForInputEventPolyfill","getTargetInstForInputEventPolyfill","getTargetInstForClickEvent","getTargetInstForInputOrChangeEvent","objectIs","is","shallowEqual","objA","objB","keysA","keysB","currentKey","getLeafNode","getNodeForCharacterOffset","nodeEnd","nextSibling","containsNode","outerNode","innerNode","contains","compareDocumentPosition","getActiveElementDeep","defaultView","HTMLIFrameElement","contentWindow","hasSelectionCapabilities","contentEditable","skipSelectionChangeEvent","activeElementInst","lastSelection","mouseDown","constructSelectEvent","selectionStart","selectionEnd","anchorNode","getSelection","anchorOffset","focusNode","focusOffset","makePrefixMap","styleProp","eventName","prefixes","vendorPrefixes","animationend","animationiteration","animationstart","transitionrun","transitionstart","transitioncancel","transitionend","prefixedEventNames","getVendorPrefixedEventName","prefixMap","animation","transition","ANIMATION_END","ANIMATION_ITERATION","ANIMATION_START","TRANSITION_RUN","TRANSITION_START","TRANSITION_CANCEL","TRANSITION_END","topLevelEventsToReactNames","simpleEventPluginEvents","registerSimpleEvent","CapturedStacks","WeakMap","createCapturedValueAtFiber","existing","concurrentQueues","concurrentQueuesIndex","concurrentlyUpdatedLanes","finishQueueingConcurrentUpdates","endIndex","markUpdateLaneFromFiberToRoot","enqueueUpdate$1","enqueueConcurrentHookUpdate","getRootForUpdatedFiber","enqueueConcurrentRenderForLane","sourceFiber","isHidden","childLanes","_visibility","hiddenUpdates","nestedUpdateCount","rootWithNestedUpdates","emptyContextObject","FiberNode","pendingProps","elementType","refCleanup","updateQueue","memoizedProps","subtreeFlags","deletions","createFiberImplClass","shouldConstruct","createWorkInProgress","firstContext","resetWorkInProgress","createFiberFromTypeAndProps","fiberTag","itemProp","rel","onLoad","onError","src","isHostHoistableType","createFiberFromFragment","elements","createFiberFromText","content","createFiberFromPortal","portal","pendingChildren","forkStack","forkStackIndex","treeForkProvider","treeForkCount","idStack","idStackIndex","treeContextProvider","treeContextId","treeContextOverflow","pushTreeFork","totalChildren","pushTreeId","baseIdWithLeadingBit","baseLength","numberOfOverflowBits","pushMaterializedTreeId","popTreeContext","hydrationParentFiber","nextHydratableInstance","hydrationErrors","rootOrSingletonContext","HydrationMismatchException","throwOnHydrationMismatch","queueHydrationError","prepareToHydrateHostInstance","instance","listenToNonDelegatedEvent","mediaEventTypes","suppressHydrationWarning","checkForUnmatchedText","popover","onScroll","onScrollEnd","onClick","onclick","popToNextHostParent","popHydrationState","JSCompiler_temp","shouldSetTextContent","getNextHydratable","isSingletonScope","previousHydratableOnEnteringScopedSingleton","resetHydrationState","upgradeHydrationErrorsToRecoverable","queuedErrors","workInProgressRootRecoverableErrors","valueCursor","currentlyRenderingFiber$1","lastContextDependency","pushProvider","providerFiber","nextValue","popProvider","scheduleContextWorkOnParentPath","propagationRoot","propagateContextChanges","contexts","forcePropagateEntireTree","list","nextFiber","dependency","propagateParentContextChanges","isInsidePropagationBailout","currentParent","checkIfContextChanged","currentDependencies","memoizedValue","prepareToReadContext","readContext","readContextForConsumer","readContextDuringReconciliation","consumer","AbortControllerLocal","AbortController","aborted","listener","scheduleCallback$2","NormalPriority","CacheContext","createCache","refCount","releaseCache","currentEntangledListeners","currentEntangledPendingCount","currentEntangledLane","currentEntangledActionThenable","pingEngtangledActionScope","prevOnStartTransitionFinish","entangledListeners","requestTransitionLane","entangleAsyncAction","resumedCache","peekCacheFromPool","cacheResumedFromPreviousRender","workInProgressRoot","pooledCache","pushTransition","offscreenWorkInProgress","prevCachePool","pool","getSuspendedCache","cacheFromPool","SuspenseException","SuspenseyCommitException","SuspenseActionException","noopSuspenseyCommitThenable","isThenableResolved","noop$3","trackUsedThenable","thenableState","checkIfUseWrappedInAsyncCatch","shellSuspendCounter","fulfilledThenable","rejectedThenable","suspendedThenable","getSuspendedThenable","rejectedReason","hasForceUpdate","initializeUpdateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","hiddenCallbacks","callbacks","cloneUpdateQueue","createUpdate","enqueueUpdate","executionContext","entangleTransitions","queueLanes","enqueueCapturedUpdate","capturedUpdate","newFirst","newLast","didReadFromEntangledAsyncAction","suspendIfUpdateReadFromEntangledAsyncAction","processUpdateQueue","workInProgress$jscomp$0","instance$jscomp$0","pendingQueue","lastPendingUpdate","firstPendingUpdate","isHiddenUpdate","workInProgressRootRenderLanes","workInProgressRootSkippedLanes","callCallback","commitCallbacks","currentTreeHiddenStackCursor","prevEntangledRenderLanesCursor","pushHiddenContext","entangledRenderLanes","baseLanes","reuseHiddenContextOnStack","popHiddenContext","currentlyRenderingFiber","currentHook","workInProgressHook","didScheduleRenderPhaseUpdate","didScheduleRenderPhaseUpdateDuringThisPass","shouldDoubleInvokeUserFnsInHooksDEV","localIdCounter","thenableIndexCounter$1","thenableState$1","globalClientIdCounter","throwInvalidHookError","areHookInputsEqual","nextDeps","prevDeps","renderWithHooks","secondArg","nextRenderLanes","HooksDispatcherOnMount","HooksDispatcherOnUpdate","renderWithHooksAgain","finishRenderingHooks","ContextOnlyDispatcher","didRenderTooFewHooks","didReceiveUpdate","numberOfReRenders","lastEffect","stores","memoCache","HooksDispatcherOnRerender","TransitionAwareHostComponent","maybeThenable","useThenable","checkDidRenderIdHook","didRenderIdHook","bailoutHooks","resetHooksOnUnwind","mountWorkInProgressHook","hook","baseQueue","updateWorkInProgressHook","nextCurrentHook","nextWorkInProgressHook","basicStateReducer","updateReducer","updateReducerImpl","lastRenderedReducer","baseFirst","newBaseQueueFirst","newBaseQueueLast","didReadFromEntangledAsyncAction$32","revertLane","hasEagerState","eagerState","lastRenderedState","dispatch","rerenderReducer","lastRenderPhaseUpdate","updateSyncExternalStore","isHydrating$jscomp$0","snapshotChanged","updateEffectImpl","subscribeToStore","bind","pushSimpleEffect","resource","updateStoreInstance","pushStoreConsistencyCheck","renderedSnapshot","nextSnapshot","checkIfSnapshotChanged","forceStoreRerender","latestGetSnapshot","scheduleUpdateOnFiber","mountStateImpl","initialStateInitializer","updateOptimisticImpl","dispatchActionState","actionQueue","setPendingState","isRenderPhaseUpdate","actionNode","isTransition","runActionStateAction","prevState","handleActionReturnValue","onActionError","error$38","nextState","onActionSuccess","notifyActionListeners","actionStateReducer","mountActionState","initialStateProp","ssrFormState","formState","JSCompiler_inline_result$jscomp$0","inRootOrSingleton","dispatchSetState","dispatchOptimisticSetState","updateActionState","updateActionStateImpl","stateHook","currentStateHook","actionStateActionEffect","rerenderActionState","updateRef","mountEffectImpl","fiberFlags","hookFlags","mountEffect","updateEffect","updateInsertionEffect","updateLayoutEffect","imperativeHandleEffect","updateImperativeHandle","mountDebugValue","updateCallback","updateMemo","nextCreate","mountDeferredValueImpl","requestDeferredLane","updateDeferredValueImpl","prevValue","pendingState","finishedState","previousPriority","thenableWithOverride","thenableForFinishedState","dispatchSetStateInternal","requestUpdateLane","noop$2","startHostTransition","formFiber","formData","ensureFormComponentIsStateful","requestFormReset$1","existingStateHook","initialResetState","updateId","updateRefresh","refreshCache","provider","root$41","dispatchReducerAction","enqueueRenderPhaseUpdate","entangleTransitionUpdate","currentState","throwIfDuringRender","identifierPrefix","booleanOrThenable","thenableIndexCounter","unwrapThenable","coerceRef","throwOnInvalidObjectType","returnFiber","newChild","resolveLazy","lazyType","createChildReconciler","shouldTrackSideEffects","deleteChild","childToDelete","deleteRemainingChildren","currentFirstChild","mapRemainingChildren","existingChildren","useFiber","placeChild","newFiber","lastPlacedIndex","newIndex","placeSingleChild","updateTextNode","updateElement","updateFragment","updatePortal","fragment","createChild","updateSlot","oldFiber","updateFromMap","newIdx","reconcileChildFibersImpl","newChildren","resultingFirstChild","previousNewFiber","nextOldFiber","delete","reconcileChildrenArray","step","reconcileChildrenIterator","firstChildFiber","reconcileChildFibers","mountChildFibers","suspenseHandlerStackCursor","shellBoundary","pushPrimaryTreeSuspenseHandler","suspenseStackCursor","pushOffscreenSuspenseHandler","reuseSuspenseHandlerOnStack","popSuspenseHandler","findFirstSuspended","row","isSuspenseInstanceFallback","revealOrder","applyDerivedStateFromProps","getDerivedStateFromProps","nextProps","classComponentUpdater","_reactInternals","checkShouldComponentUpdate","oldProps","newProps","nextContext","shouldComponentUpdate","callComponentWillReceiveProps","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","resolveClassComponentProps","baseProps","propName$73","defaultOnUncaughtError","defaultOnCaughtError","defaultOnRecoverableError","logUncaughtError","errorInfo","onUncaughtError","componentStack","e$74","logCaughtError","boundary","onCaughtError","errorBoundary","e$75","createRootErrorUpdate","createClassErrorUpdate","initializeClassErrorUpdate","getDerivedStateFromError","componentDidCatch","legacyErrorBoundariesThatAlreadyFailed","SelectiveHydrationException","reconcileChildren","nextChildren","updateForwardRef","propsWithoutRef","bailoutOnAlreadyFinishedWork","updateMemoComponent","updateSimpleMemoComponent","checkScheduledUpdateOrContext","prevProps","updateFunctionComponent","updateOffscreenComponent","deferHiddenOffscreenComponent","cachePool","nextBaseLanes","markRef","replayFunctionComponent","updateClassComponent","contextType","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","unresolvedOldProps","oldContext","contextType$jscomp$0","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","mountHostRootWithoutHydrating","SUSPENDED_MARKER","treeContext","retryLane","mountSuspenseOffscreenState","getRemainingWorkInPrimaryTree","primaryTreeDidDefer","workInProgressDeferredLane","updateSuspenseComponent","showFallback","didSuspend","JSCompiler_temp$jscomp$0","nextInstance","overflow","fallback","mountWorkInProgressOffscreenFiber","mountSuspensePrimaryChildren","retrySuspenseComponentWithoutHydrating","dataset","digest","dgst","renderDidSuspendDelayIfPossible","primaryChildren","offscreenProps","_pendingMarkers","_retryCache","_transitions","scheduleSuspenseWorkOnFiber","initSuspenseListRenderState","isBackwards","tail","lastContentRow","tailMode","renderState","rendering","renderingStartTime","updateSuspenseListComponent","beginWork","didSuspendBefore","attemptEarlyBailoutIfNoScheduledUpdate","lazyComponent","isDehydrated","getResource","getOwnerDocumentFromRootContainer","setInitialProperties","resolveSingletonInstance","anyProps","hasAttribute","getAttribute","canHydrateInstance","canHydrateTextInstance","pooledCacheLanes","markUpdate","preloadResourceAndSuspendIfNeeded","loading","preloadResource","scheduleRetryEffect","retryQueue","workInProgressSuspendedRetryLanes","cutOffTailIfNeeded","hasRenderedATailFallback","lastTailNode","lastTailNode$113","bubbleProperties","completedWork","didBailout","newChildLanes","child$114","completeWork","pendingContext","createElementNS","innerHTML","autoFocus","cache$127","listenToAllSupportedEvents","workInProgressRootExitStatus","workInProgressRootRenderTargetTime","unwindWork","unwindInterruptedWork","interruptedWork","commitHookEffectListMount","finishedWork","firstEffect","captureCommitPhaseError","commitHookEffectListUnmount","nearestMountedAncestor$jscomp$0","nearestMountedAncestor","destroy_","commitClassCallbacks","safelyCallComponentWillUnmount","componentWillUnmount","safelyAttachRef","instanceToUse","safelyDetachRef","error$143","commitHostMount","focus","srcSet","srcset","commitHostUpdate","domElement","lastProps","propKey","lastProp","setProp","propKey$205","propKey$221","propKey$226","propKey$231","setPropOnCustomElement","propKey$236","updateProperties","isHostParent","getHostSibling","insertOrAppendPlacementNodeIntoContainer","before","insertBefore","_reactRootContainer","insertOrAppendPlacementNode","commitHostSingletonAcquisition","singleton","attributes","removeAttributeNode","offscreenSubtreeIsHidden","offscreenSubtreeWasHidden","needsFormReset","PossiblyWeakSet","WeakSet","nextEffect","commitLayoutEffectOnFiber","finishedRoot","recursivelyTraverseLayoutEffects","__reactInternalSnapshotBeforeUpdate","error$142","commitSuspenseHydrationCallbacks","readyState","_reactRetry","registerSuspenseInstanceRetry","retryDehydratedSuspenseBoundary","prevOffscreenSubtreeWasHidden","recursivelyTraverseReappearLayoutEffects","detachFiberAfterEffects","hostParent","hostParentIsContainer","recursivelyTraverseDeletionEffects","commitDeletionEffectsOnFiber","deletedFiber","onCommitFiberUnmount","prevHostParent","prevHostParentIsContainer","releaseSingletonInstance","clearSuspenseBoundary","retryIfBlockedOn","attachSuspenseRetryListeners","wakeables","retryCache","getRetryCache","wakeable","retry","resolveRetryWakeable","recursivelyTraverseMutationEffects","root$jscomp$0","parentFiber","commitMutationEffectsOnFiber","currentHoistableRoot","commitReconciliationEffects","hoistableRoot","currentResource","getElementsByTagName","querySelector","maybeNodes","getHydratableHoistableCache","property","httpEquiv","charSet","mountHoistable","acquireResource","tagCaches","getHoistableRoot","recursivelyResetForms","globalMostRecentFallbackTime","wasHidden","prevOffscreenSubtreeIsHidden","recursivelyTraverseDisappearLayoutEffects","display","hostParentFiber","parent$144","parent$146","reset","finishedRoot$jscomp$0","includeWorkInProgressEffects","commitOffscreenPassiveMountEffects","previousCache","commitCachePassiveMountEffect","recursivelyTraversePassiveMountEffects","committedLanes","committedTransitions","commitPassiveMountOnFiber","_finishedWork$memoize2","onPostCommit","passiveEffectDuration","recursivelyTraverseAtomicPassiveEffects","recursivelyTraverseReconnectPassiveEffects","committedLanes$jscomp$0","committedTransitions$jscomp$0","suspenseyCommitFlag","recursivelyAccumulateSuspenseyCommit","accumulateSuspenseyCommitOnFiber","suspendedState","matchMedia","getStyleKey","getStylesheetSelectorFromKey","_p","onUnsuspend","stylesheetPropsFromRawProps","preloadPropsMap","adoptPreloadPropsForStylesheet","linkInstance","stylesheets","suspendResource","previousHoistableRoot","detachAlternateSiblings","previousFiber","recursivelyTraversePassiveUnmountEffects","commitPassiveUnmountEffectsInsideOfDeletedTree_begin","commitPassiveUnmountOnFiber","recursivelyTraverseDisconnectPassiveEffects","deletedSubtreeRoot","DefaultAsyncDispatcher","getCacheForType","resourceType","cacheForType","PossiblyWeakMap","workInProgressSuspendedReason","workInProgressThrownValue","workInProgressRootDidSkipSuspendedSiblings","workInProgressRootIsPrerendering","workInProgressRootDidAttachPingListener","workInProgressRootInterleavedUpdatedLanes","workInProgressRootPingedLanes","workInProgressRootConcurrentErrors","workInProgressRootDidIncludeRecursiveRenderUpdate","workInProgressTransitions","pendingEffectsStatus","pendingEffectsRoot","pendingFinishedWork","pendingEffectsLanes","pendingEffectsRemainingLanes","pendingPassiveTransitions","pendingRecoverableErrors","suspenseHandler","cancelPendingCommit","prepareFreshStack","markRootSuspended","ensureRootIsScheduled","performWorkOnRoot","forceSync","shouldTimeSlice","expiredLanes","exitStatus","prevExecutionContext","prevDispatcher","pushDispatcher","prevAsyncDispatcher","pushAsyncDispatcher","thrownValue","throwAndUnwindWorkLoop","replaySuspendedUnitOfWork","hostFiber","completeUnitOfWork","resetWorkInProgressStack","workLoopConcurrentByScheduler","thrownValue$169","handleThrow","renderRootConcurrent","renderRootSync","renderWasConcurrent","isRenderConsistentWithExternalStores","errorRecoveryDisabledLanes","wasRootDehydrated","timeoutHandle","scheduleTimeout","commitRootWhenReady","recoverableErrors","transitions","didIncludeRenderPhaseUpdate","updatedLanes","suspendedRetryLanes","didSkipSuspendedSiblings","suspendedCommitReason","completedRenderStartTime","completedRenderEndTime","unsuspend","insertSuspendedStylesheets","commit","stylesheetTimer","waitForCommitToBeReady","commitRoot","didAttemptEntireTree","expirationTimes","index$4","flushSyncWorkAcrossRoots_impl","cancelTimeout","allEntangledLanes","index$2","shouldYieldForPrerendering","unitOfWork","workLoopSync","thrownValue$167","performUnitOfWork","suspendedReason","rootRenderLanes","attachPingListener","markerInstances","cause","wrapperError","throwException","unwindUnitOfWork","skipSiblings","flushPendingEffects","finishedLanes","remainingLanes","previouslyPendingLanes","index$5","hiddenUpdatesForLane","markRootFinished","callbackNode","callbackPriority","flushPassiveEffects","eventsEnabled","_enabled","selection","rangeCount","indexWithinAnchor","indexWithinFocus","selectionInformation","focusedElem","selectionRange","resolvedPrevProps","clearContainerSparingly","commitBeforeMutationEffects","flushMutationEffects","flushLayoutEffects","flushSpawnedWork","rootMutationHasEffect","priorSelectionInformation","curFocusedElem","priorFocusedElem","priorSelectionRange","win","start$jscomp$0","end$jscomp$0","startMarker","endMarker","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","top","scrollTop","rootHasLayoutEffect","releaseRootPooledCache","onCommitFiberRoot","onRecoverableError","recoverableError","wasDelayedCommit","renderPriority","onPostCommitFiberRoot","captureCommitPhaseErrorOnRoot","rootFiber","pingCache","threadIDs","pingSuspendedRoot","retryTimedOutBoundary","boundaryFiber","firstScheduledRoot","lastScheduledRoot","didScheduleMicrotask","mightHavePendingSyncWork","isFlushingWork","currentEventTransitionLane","scheduleMicrotask","processRootScheduleInImmediateTask","processRootScheduleInMicrotask","syncTransitionLanes","onlyLegacy","didPerformSomeWork","root$174","performSyncWorkOnRoot","currentPopstateTransitionEvent","scheduleTaskForRootDuringMicrotask","index$3","performWorkOnRootViaSchedulerTask","didTimeout","originalCallbackNode","workInProgressRootRenderLanes$jscomp$0","coerceFormActionProp","actionProp","createFormDataWithSubmitter","submitter","temp","FormData","i$jscomp$inline_1528","eventName$jscomp$inline_1529","nonDelegatedEvents","eventSystemFlags","_dispatchQueue$i","previousInstance","i$jscomp$0","_dispatchListeners$i","targetElement","listenerSetKey","addTrappedEventListener","listenToNativeEvent","isCapturePhaseListener","listeningMarker","rootContainerElement","targetContainer","listenerWrapper","dispatchDiscreteEvent","dispatchContinuousEvent","capture","passive","dispatchEventForPluginEventSystem","targetInst$jscomp$0","ancestorInst","nodeTag","grandTag","SyntheticEventCtor","inCapturePhase","accumulateTargetOnly","reactEventName","lastHostComponent","_instance","createDispatchListener","parentWindow","getParent","accumulateEnterLeaveListenersForEvent","getTargetInstFunc","handleEventFunc","fallbackData","eventType","getNativeBeforeInputChars","char","getFallbackBeforeInputChars","maybeTargetInst","formAction","extractEvents$1","targetFiber","captureName","_instance2","_instance3","NORMALIZE_NEWLINES_REGEX","NORMALIZE_NULL_AND_REPLACEMENT_REGEX","normalizeMarkupForTextOrAttribute","markup","serverText","clientText","formEncType","formMethod","formTarget","encType","__html","muted","endsWith","hasSrc","hasSrcSet","propValue$188","parentNamespace","dangerouslySetInnerHTML","localPromise","queueMicrotask","handleErrorInNextTick","parentInstance","suspenseInstance","possiblePreambleContribution","nextNode","nextNode$jscomp$0","targetInstance","previousSibling","rootContainerInstance","preconnectsSet","getRootNode","previousDispatcher","previousWasRendering","wasRendering","formInst","preconnectAs","globalDocument","preloadSelector","getScriptKey","getScriptSelectorFromKey","scripts","adoptPreloadPropsForScript","link","insertStylesheet","limitedEscapedHref","currentProps","styles$244","resource$245","hrefLang","preloadProps","preloadStylesheet","rawProps","styleProps","instance$250","nodes","prior","stylesheetProps","scriptProps","keyAttribute","caches","nodeKey","precedencesByRoot","insertStylesheetIntoRoot","precedences","FiberRootNode","hydrate","incompleteTransitions","createFiberRoot","initialChildren","hydrationCallbacks","isStrictMode","transitionCallbacks","getContextForSubtree","parentComponent","updateContainerImpl","markRetryLaneImpl","markRetryLaneIfNotHydrated","attemptContinuousHydration","blockedOn","findInstanceBlockingEvent","return_targetInst","clearIfContinuousEvent","queuedFocus","accumulateOrCreateContinuousQueuedReplayableEvent","queuedDrag","queuedMouse","queuedPointers","queuedPointerCaptures","queueIfContinuousEvent","discreteReplayableEvents","findInstanceBlockingTarget","hasScheduledReplayAttempt","queuedExplicitHydrationTargets","existingQueuedEvent","targetContainers","attemptExplicitHydrationTarget","queuedTarget","runWithPriority","attemptReplayContinuousQueuedEvent","queuedEvent","nextBlockedOn","nativeEventClone","attemptReplayContinuousQueuedEventInMap","replayUnblockedEvents","scheduleCallbackIfUnblocked","unblocked","lastScheduledReplayQueue","scheduleReplayQueueIfNeeded","formReplayingQueue","submitterOrAction","unblock","$$reactFormReplay","formProps","ReactDOMRoot","internalRoot","_internalRoot","ReactDOMHydrationRoot","unmount","unstable_scheduleHydration","isomorphicReactPackageVersion$jscomp$inline_1785","componentOrElement","parentA","parentB","didFindChild","child$0","findCurrentFiberUsingSlowPath","internals$jscomp$inline_2256","bundleType","rendererPackageName","currentDispatcherRef","reconcilerVersion","hook$jscomp$inline_2257","isDisabled","supportsFiber","inject","reactDomClient_production","createRoot","unstable_strictMode","unstable_transitionCallbacks","hydrateRoot","clientModule","useSyncExternalStoreShim_production_min","shimModule","withSelector_production_min","useSyncExternalStoreWithSelector","hasValue","withSelectorModule","batch","getBatch","ContextKey","gT","getContext","_gT$ContextKey","React.createContext","contextMap","realContext","ReactReduxContext","createReduxContextHook","useReduxContext","refEquality","createSelectorHook","useDefaultReduxContext","selector","equalityFnOrOptions","equalityFn","stabilityCheck","noopCheck","store","subscription","getServerState","globalStabilityCheck","globalNoopCheck","wrappedSelector","selectedState","addNestedSub","getState","useSelector","reactIs_production_min","AsyncMode","ConcurrentMode","ContextProvider","Element","ForwardRef","Memo","Portal","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isProfiler","isSuspense","isValidElementType","typeOf","ContextConsumer","Lazy","SuspenseList","isPortal","isSuspenseList","getModuleId","nullListeners","notify","useIsomorphicLayoutEffect","React.useLayoutEffect","React.useEffect","serverState","contextValue","React.useMemo","unsubscribe","subscriptionsAmount","selfSubscribed","handleChangeWrapper","onStateChange","trySubscribe","clear","isSubscribed","createListenerCollection","tryUnsubscribe","cleanupListener","removed","notifyNestedSubs","getListeners","createSubscription","previousState","React.createElement","createStoreHook","useStore","createDispatchHook","useDefaultStore","useDispatch","newBatch","symbol_observable_default","observable","randomString","actionTypes_default","INIT","REPLACE","PROBE_UNKNOWN_ACTION","createStore","preloadedState","enhancer","currentReducer","currentListeners","nextListeners","listenerIdCounter","isDispatching","ensureCanMutateNextListeners","listenerId","proto","isPlainObject","replaceReducer","nextReducer","outerSubscribe","observeState","observerAsObserver","compose","funcs","arg","createThunkMiddleware","extraArgument","_ref","thunk","withExtraArgument","composeWithDevTools","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","_len","_key","BANDS","WINDOWS","LOAD_STYLE","MEDIA_TAG_REQUEST_STATUS","UTF8_ELLIPSIS","LETTERS","DEFAULT_SKIN","VISUALIZERS","VISUALIZER_ORDER","TIME_MODE","MEDIA_STATUS","PLAYER_MEDIA_STATUS","imgFromUrl","img","Image","getTimeObj","minutesFirstDigit","minutesSecondDigit","secondsFirstDigit","secondsSecondDigit","digits","getTimeStr","truncate","SECTION_REGEX","PROPERTY_REGEX","parseIni","section","clamp","base64FromDataArray","dataArray","btoa","downloadURI","uri","download","click","toPercent","percentToRange","percentToIndex","rebound","oldMin","oldMax","newMin","newMax","oldValue","normalizeEqBand","denormalizeEqBand","merge","segment","newValues","shuffle","sorted","moveSelected","isSelected","newArr","replaceAtIndex","newValue","counter","objectMap","modified","calculateBoundingBox","windows","windowSizes","bottom","getWindowSize","scrollWidth","offsetWidth","clientWidth","scrollHeight","offsetHeight","clientHeight","getPos","touch","getX","getY","defaultPlaylistState","trackOrder","currentTrack","lastSelectedIndex","selectedTracks","defaultWindowsState","focused","positionsAreRelative","genWindows","WINDOWS_MAIN","open","shade","canResize","canShade","canDouble","hotkey","WINDOWS_EQUALIZER","WINDOWS_PLAYLIST","WINDOWS_MILKDROP","browserWindowSize","windowOrder","milkdropEnabled","getSerializedState","Utils.objectMap","hidden","defaultState","timeMode","timeElapsed","volume","balance","defaultMemoize_1","defaultMemoize","defaultEqualityCheck","equalityCheck","lastArgs","lastResult","areArgumentsShallowlyEqual","createSelector_1","memoize","memoizeOptions","_len2","_key2","recomputations","resultFunc","every","dep","dependencyTypes","getDependencies","memoizedResultFunc","resetRecomputations","createSelectorCreator","defaultSkinGenExColors","itemBackground","itemForeground","windowBackground","buttonText","windowText","divider","playlistSelection","listHeaderBackground","listHeaderText","listHeaderFrameTopAndLeft","listHeaderFrameBottomAndRight","listHeaderFramePressed","listHeaderDeadArea","scrollbarOne","scrollbarTwo","pressedScrollbarOne","pressedScrollbarTwo","scrollbarDeadArea","listTextHighlighted","listTextHighlightedBackground","listTextSelected","listTextSelectedBackground","defaultDisplayState","doubled","marqueeStep","disableMarquee","llama","closed","working","skinImages","images","skinColors","skinCursors","skinPlaylistStyle","skinRegion","visualizerStyle","dummyVizData","playlistScrollPosition","skinGenLetterWidths","skinGenExColors","additionalVisualizers","zIndex","newCursors","getVisualizerStyle","createSelector","visualizationStyle","defaultUserInput","bandFocused","scrubPosition","userMessage","auto","sliders","preamp","defaultSettingsState","availableSkins","browser","condition","argIndex","framesToPop","genStringFromFileReference","fileReference","readAsText","promptForFileReferences","accept","directory","fileInput","webkitdirectory","mozdirectory","curUrlFromByteArray","Utils.base64FromDataArray","trackName","defaultName","urlIsBlobUrl","lastSegment","FileUtils.filenameFromUrl","Utils.weakMapMemoize","TransitionType","defaultMilkdropState","overlay","presetHistory","presets","currentPresetIndex","butterchurn","transitionType","DEFAULT","randomize","cycling","reducers","reducerKeys","finalReducers","finalReducerKeys","shapeAssertionError","assertReducerShape","hasChanged","previousStateForKey","nextStateForKey","combineReducers","userInput","windowId","windowState","absolute","newPosition","positions","serializedState","serializedW","rest","newSkinCursors","settings","skins","equalizer","newSliders","band","playlist","newSelectedTracks","clickedIndex","actionIds","ids","trackId","reverse","atIndex","newMode","elapsed","network","connected","tracks","mediaTagsRequestStatus","newTrack","bitrate","numberOfChannels","albumArtUrl","kbps","khz","channels","milkdrop","addToHistory","preset","Utils.replaceAtIndex","json","noshadeStyle","borderWidth","backgroundColor","Font","_jsx","Hr","Div","Table","Playlist","_jsxs","_Fragment","align","className","border","cellSpacing","cellPadding","face","numberOfTracks","averageTrackLength","playlistLengthMinutes","playlistLengthSeconds","getSliders","getEqfData","Utils.denormalizeEqBand","hz60","hz170","hz310","hz600","hz1000","hz3000","hz6000","hz12000","hz14000","hz16000","getTracks","getTrackUrl","getTrackOrder","getTrackCount","getOrderedTracks","getPlaylistTracks","getUserTracks","metaData","getOrderedTrackObjects","getSelectedTrackIds","getSelectedTrackIdsSet","selectedTrackArray","getSelectedTrackObjects","selectedIds","runningTimeFromTracks","getTotalRunningTime","getSelectedRunningTime","getRunningTimeMessage","totalRunningTime","selectedRunningTime","Utils.getTimeStr","getCurrentTrackIndex","getCurrentTrackNumber","currentTrackIndex","getCurrentTrackId","getGenWindows","getWindowOpen","getWindowHidden","milkdropWindowEnabled","getWindowShade","getWindowPositions","getNumberOfVisibleTracks","getWindowSize_","playlistSize","getOverflowTrackCount","trackCount","numberOfVisibleTracks","_getPlaylistScrollPosition","getPlaylistScrollPosition","overflowTrackCount","getScrollOffset","Utils.percentToIndex","getVisibleTrackIds","getAllTracksAreVisible","getTrackIsVisibleFunction","visibleTrackIds","getDuration","getTrackDisplayName","TrackUtils.trackName","fromTracks.getTrackDisplayName","getCurrentTrackDisplayName","getName","getPlayerMediaStatus","getMediaStatus","getMediaIsPlaying","getCurrentTrack","getCurrentlyPlayingTrackIdIfLoaded","mediaIsPlaying","getCurrentTrackInfo","getMinimalMediaText","trackNumber","getMediaText","minimalMediaText","getNumberOfTracks","getPlaylistDuration","getPlaylistURL","playlistDuration","getDisplayName","createPlaylistURL","createPlaylistHTML","getWPixelSize","doubledMultiplier","pix","getFocusedWindow","getDoubled","getLlamaMode","getZIndex","getWindowSizes","getWindowPixelSize","sizes","getNormalizedWindowOrder","getWindowsInfo","getWindowGraph","bottoms","rights","graph","edges","tops","lefts","below","isToTheLeft","isToTheRight","isAbove","isBelow","defaultPlaylistStyle","normal","normalbg","selectedbg","font","getSkinColors","getSkinPlaylistStyle","fromDisplay.getVisualizerStyle","getVolume","getBalance","getShuffle","getRepeat","getChannels","getTimeElapsed","getEqualizerEnabled","getBrowserWindowSize","getOpenWindows","Utils.objectFilter","predicate","newObj","getStackedLayoutPositions","openWindows","getUserInputFocus","getUserInputScrubPosition","getMarqueeText","defaultText","direction","MarqueeUtils.getBalanceText","seekToPercent","MarqueeUtils.getPositionText","db","toFixed","hz","ensureSign","MarqueeUtils.getEqText","mediaText","getKbps","getKhz","getMilkdropMessage","getMilkdropEnabled","getMilkdropDesktopEnabled","getMilkdropFullscreenEnabled","getButterchurn","getPresetTransitionType","getCurrentPresetIndex","getCurrentPreset","getPresetNames","getPresetOverlayOpen","getPresetsAreCycling","getRandomizePresets","getClosed","getSkinRegion","getPreampLineImage","EQ_PREAMP_LINE","Utils.imgFromUrl","getLineColorsImage","EQ_GRAPH_LINE_COLORS","getMarqueeStep","getNetworkConnected","getTimeMode","getLoading","getWorking","getAvaliableSkins","SNAP_DISTANCE","box","near","snap","boxA","boxB","overlapY","overlapX","snapDiff","newPos","snapDiffManyToMany","bs","applyDiff","withWindowGraphIntegrity","Selectors.getWindowGraph","originalSizes","Selectors.getWindowSizes","newSizes","sizeDiff","original","positionDiff","newGraph","above","neighbors","walkRight","nodeSizeDiff","walkDown","getPositionDiff","newPositions","Selectors.getWindowPositions","updateWindowPositions","toggleDoubleSizeMode","toggleEqualizerShadeMode","toggleMainWindowShadeMode","togglePlaylistShadeMode","closeWindow","setFocusedWindow","setWindowSize","toggleWindow","centerWindows","windowsInfo","Selectors.getWindowsInfo","getOpen","Selectors.getWindowOpen","offsetLeft","scrollX","offsetTop","scrollY","bounding","Utils.calculateBoundingBox","boxHeight","boxWidth","move","ceil","browserWindowSizeChanged","ensureWindowsAreOnScreen","stackWindows","Selectors.getStackedLayoutPositions","Utils.getWindowSize","boundingHeight","moveY","moveX","innerHeight","innerWidth","centerWindowsInView","PRESET_VALUES","HEADER","FONT_LOOKUP","$","imageConstFromChar","characterSprites","sprites","BALANCE","CBUTTONS","MAIN","MONOSTER","NUMBERS","NUMS_EX","PLAYPAUS","PLEDIT","EQ_EX","EQMAIN","POSBAR","SHUFREP","TITLEBAR","VOLUME","GEN","getFilenameRegex","base","getFileFromZip","zip","lastFile","contents","getSpriteUrisFromImg","canvas","willReadFrequently","sprite","drawImage","image","toDataURL","getImgFromFilename","getFileExtension","createImageBitmap","URL","createObjectURL","fallbackGetImgFromBlob","ee","getImgFromBlob","RIFF_MAGIC","getCursorFromFilename","item","aniData","FileUtils.curUrlFromByteArray","getPlaylistStyle","playlistStyle","ini","Utils.parseIni","colorKey","getGenExColors","getColorAt","getImageData","shallowMerge","objs","CURSORS","genVizColors","viscolor","SkinParserUtils","regex","rgb","parseViscolors","genImages","imageObjs","SKIN_SPRITES","genCursors","cursorObjs","cursorName","genRegion","region","regionStr","iniData","numpoints","pointlist","pointCounts","points","pairedValues","pointPairs","pointIndex","validPolygons","numStr","polygon","regionParser","genGenTextSprites","getLetters","letter","nextBackground","letterWidths","TinyQueue","defaultCompare","_down","tinyqueueModule","_up","best","cropPlaylist","Selectors.getSelectedTrackObjects","selectedTrackIds","Selectors.getSelectedTrackIds","removeSelectedTracks","removeAllTracks","reverseList","randomizeList","sortListByTitle","Selectors.getTracks","Selectors.getTrackOrder","iteratee","aKey","bKey","setPlaylistScrollPosition","scrollNTracks","Selectors.getOverflowTrackCount","currentOffset","Selectors.getScrollOffset","scrollPlaylistByDelta","totalPixelHeight","percentDelta","scrollUpFourTracks","scrollDownFourTracks","dragSelected","Selectors.getSelectedTrackIdsSet","firstSelected","findIndex","lastSelected","findLastIndex","normalizedOffset","invertSelection","selectZero","selectAll","_snapBandValue","BAND_MID_POINT_VALUE","setEqBand","_setEqTo","setEqToMax","setEqToMid","setEqToMin","setPreamp","toggleEq","toggleEqAuto","loadQueue","threads","_queue","_availableThreads","_run","t1","invariant","addTracksFromReferences","fileReferences","loadStyle","loadMediaFiles","SKIN_FILENAME_MATCHER","EQF_FILENAME_MATCHER","loadFilesFromReferences","setSkinFromBlob","genArrayBufferFromFileReference","eqf","Int8Array","nameStart","nameEnd","valueName","setEqFromObject","setEqFromFileReference","requireJSZip","alert","JSZip","skinData","zipFileBuffer","cursors","genTextSprites","genExColors","genLetterWidths","genTextImages","skinParser","setSkinFromUrl","response","fetch","ok","statusText","_openFileDialog","expectedType","firstFileName","openEqfFileDialog","openMediaFileDialog","openSkinFileDialog","loadMedia","handleTrackDropEvent","canonicalUrl","audio","durationChange","errorHandler","genMediaDuration","trackIsVisible","fetchMediaDuration","fetchMediaTags","queueFetchingMediaTags","loadMediaFile","requireMusicMetadata","musicMetadata","skipPostHeaders","fetchFromUrl","parseBlob","genMediaTags","byteArray","Utils.normalizeEqBand","downloadPreset","ending","creator","Utils.base64FromArrayBuffer","Utils.downloadURI","downloadHtmlPlaylist","el","DIR_SUPPORT","addFilesAtIndex","nextIndex","addDirAtIndex","addFilesFromUrl","handleAddUrlEvent","addFilesFromList","handleLoadListEvent","saveFilesToList","handleSaveListEvent","droppedFiles","playTrack","Selectors.getMediaStatus","playTrackNow","play","nextN","nextTrackId","nextId","getRandomTrackId","currentIndex","Utils.clamp","Selectors.getNextTrackId","seekToTime","Selectors.getDuration","seekForward","Selectors.getTimeElapsed","seekBackward","setVolume","adjustVolume","volumeDiff","scrollVolume","setBalance","toggleRepeat","toggleShuffle","toggleTimeMode","normalizePresetTypes","butterchurnPresetObject","getPreset","getButterchrunPresetObject","butterchurnPresetUrl","loadPresets","presetsLength","Selectors.getRandomizePresets","selectRandomPreset","requestPresetAtIndex","IMMEDIATE","appendPresetFileList","fileList","convertPreset","MILK_EXT","JSON_EXT","FileUtils.genStringFromFileReference","selectNextPreset","Selectors.getCurrentPresetIndex","selectPreviousPreset","handlePresetDrop","toggleRandomizePresets","togglePresetCycling","scheduleMilkdropMessage","toggleVisualizerStyle","minimize","setFocus","unsetFocus","focusBand","loadDefaultSkin","toggleMilkdropDesktop","Selectors.getMilkdropDesktopEnabled","setMilkdropFullscreen","toggleMilkdropFullscreen","Selectors.getMilkdropFullscreenEnabled","togglePresetOverlay","Selectors.getPresetOverlayOpen","stepMarquee","mediaMiddleware","nextTrack","Selectors.getCurrentTrackId","Selectors.getVolume","Selectors.getBalance","seekToPercentComplete","Selectors.getTrackUrl","loadFromUrl","disableEq","enableEq","Selectors.getEqualizerEnabled","slider","actionsDenylist","createWebampStore","actionEmitter","customMiddlewares","stateOverrides","extras","middlewares","trigger","createStore2","middlewareAPI","chain","middleware","applyMiddleware","fullscreenEnabled","fullscreenElement","requestFullscreen","exitFullscreen","fullscreenchange","fullscreenerror","fullscreen","webkit","moz","vendor","fscreen","requestFullscreenFunction","fullscreenPseudoClass","onfullscreenchange","onfullscreenerror","FullScreen","onChange","detectFullScreen","isEnabled","usePromiseValueOrNull","disposed","resolvedValue","cursorPositionRef","listenerRefCount","globalMouseMoveHandler","useTypedSelector","useActionCreator","actionCreator","useTypedDispatch","hasOwn","classNames","classes","appendClass","parseValue","newClass","currentSize","widthOnly","passThroughProps","setMouseDown","mouseStart","setMouseStart","handleMove","Utils.getX","Utils.getY","newSize","handleMouseUp","handleMouseDown","onMouseDown","onTouchStart","FocusTarget","onKeyDown","focusedWindowId","Selectors.getFocusedWindow","Actions.setFocusedWindow","focusHandler","setRef","mutations","mutation","removedNodes","subtree","childList","disconnect","onPointerDown","onFocus","tabIndex","ACTIVE_CLASSNAME","WinampButton","requireClicksOriginateLocally","originalOnPointerDown","htmlProps","active","setActive","releasePointerCapture","onRelease","classnames","onPointerEnter","CustomEvent","Text","letters","React.Fragment","GenWindow","Actions.setWindowSize","Actions.closeWindow","Selectors.getWindowPixelSize","focusedWindow","windowSize","Selectors.getWindowSize","ResizeTarget","TRANSITION_TYPE_DURATIONS","USER_PRESET","Visualizer","analyser","Selectors.getVisualizerStyle","playing","Selectors.getMediaIsPlaying","Selectors.getButterchurn","trackTitle","Selectors.getCurrentTrackDisplayName","currentPreset","Selectors.getCurrentPreset","Selectors.getPresetTransitionType","Selectors.getMilkdropMessage","isEnabledVisualizer","canvasRef","visualizer","setVisualizer","_visualizer","createVisualizer","meshWidth","meshHeight","pixelRatio","devicePixelRatio","onlyUseWASM","connectAudio","setRendererSize","hasLoadedPreset","loadPreset","launchSongTitleAnim","lastShownMessage","shouldAnimate","animationFrameRequest","loop","requestAnimationFrame","cancelAnimationFrame","Background","innerRef","LOADING_STYLE","background","OUTER_WRAPPER_STYLE","padding","INNER_WRAPPER_STYLE","whiteSpace","fontSize","presetIndexFromListIndex","listIndex","PresetOverlay","presetKeys","Selectors.getPresetNames","Actions.requestPresetAtIndex","Actions.togglePresetOverlay","Actions.appendPresetFileList","unmountedRef","useUnmountedRef","selectedListIndex","setSelectedListIndex","maxListIndex","renderList","maxVisibleRows","rowsToShow","startIndex","maxRangeSize","indexToCenter","rangeSize","halfRangeSize","getRangeCenteredOnIndex","presetElms","presetIndex","isCurrent","lineHeight","loadLocalDir","handleFocusedKeyboardInput","handleNode","maxHeight","listStyleType","margin","suppress","dropEffect","effectAllowed","DropTarget","handleDrop","onWheelActive","divRef","Actions.droppedFiles","handleWheel","onDrop","getBoundingClientRect","onDragStart","onDragEnter","onDragOver","div","Parent","LinkNode","Node","ContextMenu","Selectors.getZIndex","ContextMenuWraper","renderContents","openPosition","setOpenPosition","closeMenu","handleGlobalClick","handleRightClick","onContextMenu","MilkdropContextMenu","desktop","toggleDesktop","Actions.toggleMilkdropDesktop","toggleFullscreen","Actions.toggleMilkdropFullscreen","ContextMenuWrapper","Desktop","React.memo","desktopNode","React.useState","classList","Milkdrop","presetsAreCycling","Selectors.getPresetsAreCycling","Actions.selectNextPreset","Actions.handlePresetDrop","setFullscreen","Actions.setMilkdropFullscreen","handleKeyDown","Actions.selectPreviousPreset","toggleRandomize","Actions.toggleRandomizePresets","Actions.scheduleMilkdropMessage","toggleCycling","Actions.togglePresetCycling","useKeyHandler","intervalId","setInterval","clearInterval","screenSize","screen","useScreenSize","setSize","useWindowSize","toggleFullScreenIfEnabled","genWindowSize","Fullscreen","onDoubleClick","PlaybackContextMenu","Actions.previous","Actions.play","Actions.pause","Actions.stop","Actions.next","Actions.seekForward","Actions.seekBackward","Actions.nextN","SkinContextMenu","Actions.loadDefaultSkin","Actions.openSkinFileDialog","setSkin","Actions.setSkinFromUrl","Selectors.getAvaliableSkins","skin","OptionsContextMenu","Actions.toggleTimeMode","Actions.toggleDoubleSizeMode","Actions.toggleRepeat","Actions.toggleShuffle","Selectors.getDoubled","Selectors.getTimeMode","Selectors.getRepeat","Selectors.getShuffle","SkinsContextMenu","MainContextMenu","filePickers","networkConnected","Selectors.getNetworkConnected","Selectors.getGenWindows","Actions.close","Actions.openMediaFileDialog","Actions.loadMediaFiles","Actions.toggleWindow","menuOpened","isMilkdropEnabled","Selectors.getMilkdropEnabled","picker","requiresNetwork","filePicker","contextMenuName","abuts","wouldMoveTo","SnapUtils.snap","useHandleMouseDown","propsWindows","Selectors.getWindowHidden","Selectors.getBrowserWindowSize","Actions.updateWindowPositions","draggingState","setDraggingState","boundingBox","moving","stationary","handleMouseMove","proposedDiff","proposedWindows","SnapUtils.applyDiff","proposedBox","SnapUtils.snapDiffManyToMany","withinDiff","snapWithin","SnapUtils.snapWithinDiff","finalDiff","diffs","metaDiff","SnapUtils.applyMultipleDiffs","windowPositionDiff","movingSet","findAllConnected","areConnected","candidates","checkNode","candidate","boxes","firstNode","SnapUtils.boundingBox","WindowManager","onBlur","touchAction","_deburrLetter","freeGlobal","freeSelf","_Symbol","isArray_1","objectProto","nativeObjectToString","symToStringTag","toStringTag","getRawTag","isOwn","unmasked","baseGetTag","arrayMap","symbolProto","symbolToString","baseToString","isObjectLike","isSymbol","deburrLetter","reLatin","reComboMark","characterClassName","deburr","Character","passThrough","MiniTime","toggle","timeObj","showMinus","blinking","ClickedDiv","clicked","setClicked","ContextMenuTarget","setSelected","rect","pageXOffset","pageYOffset","getNodeOffset","renderMenu","FFT","bitrevtable","envelope","equalize","temp1","temp2","cossintable","static","NFREQ","samplesOut","initBitRevTable","initCosSinTable","initEnvelopeTable","initEqualizeTable","Float32Array","bias","invHalfNfreq","samplesIn","power","mult","TWO_PI","sin","HALF_PI","dftsize","theta","PI","cos","timeToFrequencyDomain","inWavedata","outSpectraldata","idx","real","imag","wpr","wpi","wr","wi","hdftsize","tempr","tempi","wtemp","sqrt","VisPaintHandler","_vis","_ctx","vis","prepare","paintFrame","dispose","BarPaintHandler","saPeaks","saData2","saData","saFalloff","barPeak","uVar12","falloff","peakFalloff","pushDown","inWaveData","outSpectralData","_analyser","_fft","_color","_colorPeak","_bar","_peak","_16h","_bufferLength","_dataArray","colorssmall","colorssmall2","_renderHeight","_smallVis","_pixelDensity","_doubled","_isMWOpen","paintBar","frequencyBinCount","renderHeight","smallVis","pixelDensity","isMWOpen","paintAnalyzer","Int16Array","coloring","paintBarFire","paintBarLine","paintBarNormal","saPeakFalloff","ctx","fillStyle","fillRect","logMaxFreqIndex","targetSize","maxWidth","fft","getByteTimeDomainData","processFFT","logScaledIndex","scaledIndex","index1","index2","maxFreqIndex","frac2","frac1","bandwidth","x2","barHeight","peakHeight","peaks","peakY","slice1st","sliceWidth","sliceNumber","WavePaintHandler","_lastX","_lastY","_pixelRatio","paintWav","fftSize","paintOscilloscope","imageSmoothingEnabled","mozImageSmoothingEnabled","webkitImageSmoothingEnabled","msImageSmoothingEnabled","amplitude","colorIndex","yadjust","oscStyle","NoVisualizerHandler","cleared","Vis","Selectors.getSkinColors","audioStatus","Selectors.getWindowShade","Actions.toggleVisualizerStyle","windowShade","renderWidthBG","bgCanvas","bgColor","fgColor","distance","bgCanvasCtx","preRenderBg","setCanvas","painter","sa","canvasCtx","clearRect","animationRequest","ActionButtons","Balance","Actions.setBalance","Actions.setFocus","Actions.unsetFocus","onPointerUp","offsetFromBalance","MainBalance","backgroundPosition","Close","setFocusDouble","mouseUp","ClutterBar","Eject","toggleEqualizer","EqToggleButton","handleClick","windowOpen","togglePlaylist","PlaylistToggleButton","CharacterString","chars","Kbps","Selectors.getKbps","Khz","Selectors.getKhz","isLong","loopText","padEnd","Marquee","Selectors.getMarqueeText","Selectors.getMarqueeStep","Actions.stepMarquee","dragOffset","dragging","mouseDownX","setMouseDownX","setDragOffset","xStart","cleanedUp","React.useCallback","useDragX","pixels","mod","SEPARATOR","stepOffset","offsetPixels","stepping","setStepping","stepHandle","steppingTimeout","useStepper","willChange","MonoStereo","Selectors.getChannels","Position","displayedPosition","Selectors.getUserInputScrubPosition","Selectors.getUserInputFocus","usePosition","onInput","Repeat","Shade","Actions.toggleMainWindowShadeMode","Minimize","Actions.minimize","Shuffle","Time","Utils.getTimeObj","Volume","Actions.setVolume","MainVolume","loadMediaAndPlay","Actions.loadMedia","MainWindow","mainShade","Selectors.getLoading","Selectors.getLlamaMode","Selectors.getWorking","draggable","Actions.scrollVolume","PlaylistResizeTarget","PlaylistShade","Selectors.getMinimalMediaText","toggleShade","Actions.togglePlaylistShadeMode","focusWindow","addedWidth","trimmedName","nameLength","hover","cursorRef","setHover","setNode","domRect","enter","leave","useIsHovered","handleClickOut","clickOutTarget","useOnClickAway","selected_","PlaylistMenuEntry","AddMenu","Selectors.getTrackCount","Actions.addDirAtIndex","Actions.addFilesAtIndex","Actions.addFilesFromUrl","PlaylistMenu","RemoveMenu","removeSelected","Actions.removeSelectedTracks","removeAll","Actions.removeAllTracks","crop","Actions.cropPlaylist","SelectionMenu","invert","Actions.invertSelection","Actions.selectZero","Actions.selectAll","SortContextMenu","Actions.reverseList","Actions.randomizeList","Actions.sortListByTitle","MiscOptionsContextMenu","Actions.downloadHtmlPlaylist","MiscMenu","ListMenu","Actions.addFilesFromList","Actions.saveFilesToList","RunningTimeDisplay","runningTimeMessage","Actions.getRunningTimeMessage","rightPad","PlaylistWindow","TrackCell","handleMoveClick","Selectors.getSkinPlaylistStyle","currentTrackId","Actions.playTrackNow","handleTouchStart","handleSecondTap","TrackTitle","paddedTrackNumber","Selectors.getTrackDisplayName","TrackList","trackIds","Selectors.getVisibleTrackIds","Selectors.getNumberOfTracks","Actions.dragSelected","Actions.scrollPlaylistByDelta","setMoving","mouseStartY","setMouseStartY","_handleMoveClick","_renderTracks","lastDiff","maxTrackNumberLength","paddedTrackNumForIndex","userSelect","VerticalSlider","handle","handleHeight","onBeforeChange","onAfterChange","handleRef","handlePointerDown","sliderNode","sliderRect","handleRect","sliderTop","sliderHeight","handleTop","realHandleHeight","baseOffset","spanSize","moveToPosition","handlePointerMove","handleRelease","registerMoveListener","Handle","PlaylistScrollBar","playlistHeight","Selectors.getPlaylistScrollPosition","allTracksAreVisible","Selectors.getAllTracksAreVisible","Actions.setPlaylistScrollPosition","marginLeft","_maxTrackIndex","selectedWindow","maxTrackIndex","playlistShade","playlistWindowPixelSize","Actions.scrollUpFourTracks","Actions.scrollDownFourTracks","showVisualizer","activateVisualizer","targetCoords","fontFamily","showSpacers","PlaylistActionArea","Band","clickOriginatedInEq","Selectors.getSliders","spriteNumber","Actions.focusBand","EqOn","Actions.toggleEq","EqAuto","toggleAuto","Actions.toggleEqAuto","swapRows","EqGraph","preampLineImage","Selectors.getPreampLineImage","canvasNode","setCanvasNode","colorPattern","lineColorsImage","Selectors.getLineColorsImage","createPattern","useColorPattern","preampValue","GRAPH_HEIGHT","amplitudes","xs","ys","allYs","ks","matrix","rows","columns","zerosMatrix","iMax","vali","NEGATIVE_INFINITY","solve","getNaturalKs","maxX","spline","lastY","yTop","drawEqLine","PresetsContextMenu","Actions.openEqfFileDialog","Actions.downloadPreset","Actions.setEqFromObject","builtin","EqTitleButtons","Actions.toggleEqualizerShadeMode","EqualizerShade","eqVolumeClassName","eqBalanceClassName","EqualizerWindow","setPreampValue","Actions.setPreamp","Actions.setEqToMin","Actions.setEqToMid","Actions.setEqToMax","setHertzValue","Actions.setEqBand","setClickOriginatedInEq","onReleaseHz","hertz","imageSelectors","MAIN_BALANCE_BACKGROUND","MAIN_BALANCE_THUMB","MAIN_BALANCE_THUMB_ACTIVE","MAIN_PREVIOUS_BUTTON","MAIN_PREVIOUS_BUTTON_ACTIVE","MAIN_PLAY_BUTTON","MAIN_PLAY_BUTTON_ACTIVE","MAIN_PAUSE_BUTTON","MAIN_PAUSE_BUTTON_ACTIVE","MAIN_STOP_BUTTON","MAIN_STOP_BUTTON_ACTIVE","MAIN_NEXT_BUTTON","MAIN_NEXT_BUTTON_ACTIVE","MAIN_EJECT_BUTTON","MAIN_EJECT_BUTTON_ACTIVE","MAIN_WINDOW_BACKGROUND","MAIN_STEREO","MAIN_STEREO_SELECTED","MAIN_MONO","MAIN_MONO_SELECTED","NO_MINUS_SIGN","MINUS_SIGN","DIGIT_0","DIGIT_1","DIGIT_2","DIGIT_3","DIGIT_4","DIGIT_5","DIGIT_6","DIGIT_7","DIGIT_8","DIGIT_9","NO_MINUS_SIGN_EX","MINUS_SIGN_EX","DIGIT_0_EX","DIGIT_1_EX","DIGIT_2_EX","DIGIT_3_EX","DIGIT_4_EX","DIGIT_5_EX","DIGIT_6_EX","DIGIT_7_EX","DIGIT_8_EX","DIGIT_9_EX","MAIN_PLAYING_INDICATOR","MAIN_PAUSED_INDICATOR","MAIN_STOPPED_INDICATOR","MAIN_NOT_WORKING_INDICATOR","MAIN_WORKING_INDICATOR","PLAYLIST_TOP_TILE","PLAYLIST_TOP_LEFT_CORNER","PLAYLIST_TITLE_BAR","PLAYLIST_TOP_RIGHT_CORNER","PLAYLIST_TOP_TILE_SELECTED","PLAYLIST_TOP_LEFT_SELECTED","PLAYLIST_TITLE_BAR_SELECTED","PLAYLIST_TOP_RIGHT_CORNER_SELECTED","PLAYLIST_LEFT_TILE","PLAYLIST_RIGHT_TILE","PLAYLIST_SCROLL_HANDLE","PLAYLIST_SCROLL_HANDLE_SELECTED","PLAYLIST_BOTTOM_TILE","PLAYLIST_BOTTOM_LEFT_CORNER","PLAYLIST_BOTTOM_RIGHT_CORNER","PLAYLIST_VISUALIZER_BACKGROUND","PLAYLIST_SHADE_BACKGROUND","PLAYLIST_SHADE_BACKGROUND_LEFT","PLAYLIST_SHADE_BACKGROUND_RIGHT","PLAYLIST_SHADE_BACKGROUND_RIGHT_SELECTED","PLAYLIST_ADD_MENU_BAR","PLAYLIST_ADD_URL","PLAYLIST_ADD_URL_SELECTED","PLAYLIST_ADD_DIR","PLAYLIST_ADD_DIR_SELECTED","PLAYLIST_ADD_FILE","PLAYLIST_ADD_FILE_SELECTED","PLAYLIST_REMOVE_MENU_BAR","PLAYLIST_REMOVE_ALL","PLAYLIST_REMOVE_ALL_SELECTED","PLAYLIST_CROP","PLAYLIST_CROP_SELECTED","PLAYLIST_REMOVE_SELECTED","PLAYLIST_REMOVE_SELECTED_SELECTED","PLAYLIST_REMOVE_MISC","PLAYLIST_REMOVE_MISC_SELECTED","PLAYLIST_SELECT_MENU_BAR","PLAYLIST_INVERT_SELECTION","PLAYLIST_INVERT_SELECTION_SELECTED","PLAYLIST_SELECT_ZERO","PLAYLIST_SELECT_ZERO_SELECTED","PLAYLIST_SELECT_ALL","PLAYLIST_SELECT_ALL_SELECTED","PLAYLIST_CLOSE_SELECTED","PLAYLIST_COLLAPSE_SELECTED","PLAYLIST_EXPAND_SELECTED","PLAYLIST_MISC_MENU_BAR","PLAYLIST_MISC_OPTIONS","PLAYLIST_MISC_OPTIONS_SELECTED","PLAYLIST_FILE_INFO","PLAYLIST_FILE_INFO_SELECTED","PLAYLIST_SORT_LIST","PLAYLIST_SORT_LIST_SELECTED","PLAYLIST_LIST_BAR","PLAYLIST_NEW_LIST","PLAYLIST_NEW_LIST_SELECTED","PLAYLIST_LOAD_LIST","PLAYLIST_LOAD_LIST_SELECTED","PLAYLIST_SAVE_LIST","PLAYLIST_SAVE_LIST_SELECTED","EQ_WINDOW_BACKGROUND","EQ_TITLE_BAR","EQ_TITLE_BAR_SELECTED","EQ_SLIDER_BACKGROUND","EQ_SLIDER_THUMB","EQ_SLIDER_THUMB_SELECTED","EQ_ON_BUTTON","EQ_ON_BUTTON_DEPRESSED","EQ_ON_BUTTON_SELECTED","EQ_ON_BUTTON_SELECTED_DEPRESSED","EQ_AUTO_BUTTON","EQ_AUTO_BUTTON_DEPRESSED","EQ_AUTO_BUTTON_SELECTED","EQ_AUTO_BUTTON_SELECTED_DEPRESSED","EQ_GRAPH_BACKGROUND","EQ_PRESETS_BUTTON","EQ_PRESETS_BUTTON_SELECTED","EQ_SHADE_BACKGROUND","EQ_SHADE_BACKGROUND_SELECTED","EQ_SHADE_VOLUME_SLIDER_LEFT","EQ_SHADE_VOLUME_SLIDER_CENTER","EQ_SHADE_VOLUME_SLIDER_RIGHT","EQ_SHADE_BALANCE_SLIDER_LEFT","EQ_SHADE_BALANCE_SLIDER_CENTER","EQ_SHADE_BALANCE_SLIDER_RIGHT","EQ_MAXIMIZE_BUTTON_ACTIVE","EQ_MINIMIZE_BUTTON_ACTIVE","EQ_CLOSE_BUTTON","EQ_CLOSE_BUTTON_ACTIVE","EQ_SHADE_CLOSE_BUTTON","EQ_SHADE_CLOSE_BUTTON_ACTIVE","MAIN_POSITION_SLIDER_BACKGROUND","MAIN_POSITION_SLIDER_THUMB","MAIN_POSITION_SLIDER_THUMB_SELECTED","MAIN_SHUFFLE_BUTTON","MAIN_SHUFFLE_BUTTON_DEPRESSED","MAIN_SHUFFLE_BUTTON_SELECTED","MAIN_SHUFFLE_BUTTON_SELECTED_DEPRESSED","MAIN_REPEAT_BUTTON","MAIN_REPEAT_BUTTON_DEPRESSED","MAIN_REPEAT_BUTTON_SELECTED","MAIN_REPEAT_BUTTON_SELECTED_DEPRESSED","MAIN_EQ_BUTTON","MAIN_EQ_BUTTON_SELECTED","MAIN_EQ_BUTTON_DEPRESSED","MAIN_EQ_BUTTON_DEPRESSED_SELECTED","MAIN_PLAYLIST_BUTTON","MAIN_PLAYLIST_BUTTON_SELECTED","MAIN_PLAYLIST_BUTTON_DEPRESSED","MAIN_PLAYLIST_BUTTON_DEPRESSED_SELECTED","MAIN_TITLE_BAR","MAIN_TITLE_BAR_SELECTED","MAIN_EASTER_EGG_TITLE_BAR","MAIN_EASTER_EGG_TITLE_BAR_SELECTED","MAIN_OPTIONS_BUTTON","MAIN_OPTIONS_BUTTON_DEPRESSED","MAIN_MINIMIZE_BUTTON","MAIN_MINIMIZE_BUTTON_DEPRESSED","MAIN_SHADE_BUTTON","MAIN_SHADE_BUTTON_DEPRESSED","MAIN_CLOSE_BUTTON","MAIN_CLOSE_BUTTON_DEPRESSED","MAIN_CLUTTER_BAR_BACKGROUND","MAIN_CLUTTER_BAR_BACKGROUND_DISABLED","MAIN_CLUTTER_BAR_BUTTON_O_SELECTED","MAIN_CLUTTER_BAR_BUTTON_A_SELECTED","MAIN_CLUTTER_BAR_BUTTON_I_SELECTED","MAIN_CLUTTER_BAR_BUTTON_D_SELECTED","MAIN_CLUTTER_BAR_BUTTON_V_SELECTED","MAIN_SHADE_BACKGROUND","MAIN_SHADE_BACKGROUND_SELECTED","MAIN_SHADE_BUTTON_SELECTED","MAIN_SHADE_BUTTON_SELECTED_DEPRESSED","MAIN_SHADE_POSITION_BACKGROUND","MAIN_SHADE_POSITION_THUMB","MAIN_SHADE_POSITION_THUMB_LEFT","MAIN_SHADE_POSITION_THUMB_RIGHT","MAIN_VOLUME_BACKGROUND","MAIN_VOLUME_THUMB","MAIN_VOLUME_THUMB_SELECTED","GEN_TOP_CENTER_FILL","GEN_TOP_LEFT","GEN_TOP_LEFT_END","GEN_TOP_RIGHT","GEN_TOP_RIGHT_END","GEN_TOP_LEFT_RIGHT_FILL","GEN_TOP_CENTER_FILL_SELECTED","GEN_TOP_LEFT_SELECTED","GEN_TOP_LEFT_END_SELECTED","GEN_TOP_RIGHT_SELECTED","GEN_TOP_RIGHT_END_SELECTED","GEN_TOP_LEFT_RIGHT_FILL_SELECTED","GEN_BOTTOM_LEFT","GEN_BOTTOM_RIGHT","GEN_BOTTOM_FILL","GEN_MIDDLE_LEFT","GEN_MIDDLE_LEFT_BOTTOM","GEN_MIDDLE_RIGHT","GEN_MIDDLE_RIGHT_BOTTOM","GEN_CLOSE_SELECTED","cursorSelectors","CLOSE","EQSLID","EQNORMAL","EQCLOSE","EQTITLE","MAINMENU","MIN","NORMAL","MMENU","PNORMAL","PTBAR","PCLOSE","PWINBUT","PSIZE","PWSSIZE","PWSNORM","PVSCROLL","SONGNAME","VOLBAL","WINBUT","WSNORMAL","WSPOSBAR","Css","ClipPaths","paths","endianness","swap","theByte","IntParser","signed","lastByteMask_","unpack","unpackUnsigned_","unpackSigned_","overflow_","overflowClamp_","pack","unpack_","sign_","RangeError","IEEE754Buffer","ebits","fbits","numBytes","biasP2","ebitsFbits","fbias","sign","exp","fraction","roundToEven","packFloatBits_","significand","leftBits","exponent","unpackString","lowerBoundary","upperBoundary","unpackUTF8","unpackArray","theType","safe","packer","fp","TYPE_ERR","validateFloatType","validateIntType","getParser_","getUnpackLen_","be","throwValueError_","unpackArrayTo","RIFFFile","uInt32","supported_containers","setSignature","readUInt32","chunkId","subChunks","getSubChunksIndex_","chunkData","findChunk","maxSize","getSubChunkIndex_","getChunkId_","getChunkSize_","realChunkSize","DWORD","JIFFIES_PER_MS","uniqueId","CSS_PREFIX","mapRegionNamesToIds","windowshade","equalizerws","mapRegionNamesToMatcher","FALLBACKS","normalizeCursorSelector","getCssRules","Selectors.getSkinRegion","cssRules","imageName","imageUrl","_selector","selectedWidth","cursorSelector","cursorRules","aniBinary","ani","riff","mapChunk","readImages","frameCount","words","cbSize","nFrames","nSteps","iWidth","iHeight","iBitCount","nPlanes","iDispRate","bfAttributes","seq","lists","imageChunk","infoChunk","parseAni","frames","percents","frameIdx","readAni","convertAniBinaryToCSS","numExIsUsed","regionName","polygons","matcher","getClipPaths","clipPaths","Skin","App","onMount","parentDomNode","Selectors.getClosed","genWindowsInfo","Actions.browserWindowSizeChanged","webampNode","role","handleWindowResize","renderWindows","getAnalyser","MilkdropWindow","IGNORE_EVENTS_FROM_TAGS","Emitter","eventListeners","Disposable","_teardowns","teardowns","teardown","StereoBalanceNode","upMixer","createGain","channelCount","channelCountMode","channelInterpretation","splitter","createChannelSplitter","leftGain","rightGain","merger","createChannelMerger","rawValue","gain","connect","audioParam","defineProperties","writable","AudioNode","ElementSource","_emitter","_source","_destination","_audio","_stalled","_disposable","destination","suspendHandler","_setStalled","durationChangeHandler","endedHandler","_setStatus","timeUpdateHandler","createMediaElementSource","stalled","loadUrl","getStalled","getStatus","_balance","_staticSource","_preamp","_gainNode","_bands","AudioContext","webkitAudioContext","resumeHandler","createAnalyser","smoothingTimeConstant","createBiquadFilter","frequency","timeRemaining","percentComplete","seekTime","autoPlay","Webamp$1","_actionEmitter","_root","browserIsSupported","supportsAudioApi","supportsCanvas","initialTracks","initialSkin","enableHotkeys","enableDoubleSizeMode","__butterchurnOptions","__customMediaClass","importConvertPreset","presetConverterEndpoint","convert","webamp","presetOptions","getStore","__customMiddlewares","__initialState","enableMediaSession","onTrackDidChange","mediaSession","MediaMetadata","artwork","setActionHandler","previousTrack","onLine","butterchurnOpen","getPresets","importButterchurn","butterchurnModule","normalizePresets","handleOnline","handleOffline","layout","_bufferTracks","avaliableSkins","windowLayout","extraHeight","plusHeight","extraWidth","plusWidth","shadeMode","currentPos","bindHotkeys","Actions.seekToTime","isShuffleEnabled","isRepeatEnabled","setCurrentTrack","Actions.playTrack","appendTracks","setTracksToPlay","Selectors.getPlaylistTracks","Selectors.getPlayerMediaStatus","onWillClose","reopen","previousTrackId","Selectors.getCurrentlyPlayingTrackIdIfLoaded","Selectors.getCurrentTrackInfo","onMinimize","skinIsLoaded","storeHas","renderWhenReady","mountPromise","__loadSerializedState","Actions.loadSerializedState","__getSerializedState","fromMedia.getSerializedState","fromDisplay.getSerializedState","fromWindows.getSerializedState","__onStateChange","unsubscribed","Webamp","nextHandle","tasksByHandle","registerImmediate","currentlyRunningATask","runIfPresent","run","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","messagePrefix","installPostMessageImplementation","builder","readableStreamBrowser","utils","_keyStr","chr1","chr2","chr3","enc1","enc2","enc3","enc4","remainingBytes","resultIndex","dataUrlPrefix","ES6Promise","nodejsUtils","scheduleDrain","draining","Mutation","called","scriptEl","oldQueue","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","resolver","safelyResolveThenable","QueueItem","unwrap","getThen","onSuccess","tryCatch","out","iterable","resolved","allResolver","outValue","require$$3","identity","stringToArrayLike","part","arrayToStringHelper","resultStr","arrayLikeToString","canUseApply","arrayLikeToArrayLike","arrayFrom","arrayTo","outputType","inputType","parts","res","superCtor","Obj","attr","inputData","isBinary","isOptimizedBinaryString","isBase64","WebampLazy","defaultEnc","parseGenreCode","FrameParser","warningCollector","includeCovers","nullTerminatorLength","getNullTerminatorLength","fzero","util.decodeString","functionList","splitValue","genres","word","parseGenre","idAndData","readIdentifierAndData","pic","majorVer","Id3v2ContentError","makeUnexpectedMajorVersionError","fixPictureMimeType","syltHeader","SyncTextHeader","readSyllables","nullStr","readNullTerminatedString","textHeader","descriptorStr","textStr","ufid","priv","dataLen","zeroIndex","pictureType","trimArray","enc","asciiDecoder","ID3v2Parser","id3Header","headerType","removeUnsyncBytes","readI","writeI","getFrameHeaderLength","readFrameFlags","tag_alter_preservation","file_alter_preservation","read_only","grouping_identity","encryption","data_length_indicator","readFrameData","frameHeader","frameParser","makeDescriptionTagName","parseExtendedHeader","parseId3Data","extendedHeader","dataRemaining","parseExtendedHeaderData","extendedHeaderSize","parseMetadata","handleTag","resolveValue","frameHeaderLength","frameHeaderBytes","readFrameHeader","frameDataBytes","Token.UINT24_BE","AbstractID3Parser","id3parser","startsWithID3v2Header","parseID3v2","finalize","tryReadId3v2Headers","postId3v2Parse","id3v1parser","ReplayGain","gain_type","common.getBitAllignedNumber","gain_adj","origin","adjustment","ExtendedLameHeader","track_peak","vbr_method","lowpass_filter","track_gain","album_gain","music_length","music_crc","header_crc","InfoTagHeaderTag","LameEncoderVersion","XingHeaderFlags","util.isBitSet","toc","vbrScale","MpegContentError","MPEG4","AudioObjectTypes","SamplingFrequencies","MPEG4_ChannelConfigurations","MpegFrameHeader","bitrateIndex","sampRateFreqIndex","privateBit","channelModeIndex","modeExtension","isOriginalMedia","samplingRate","frameLength","versionIndex","layer","LayerDescription","parseAdtsHeader","parseMpegHeader","isProtectedByCRC","common.isBitSet","calcDuration","numFrames","calcSamplesPerFrame","samplesInFrameTable","calculateSideInfoLength","calcSlotSize","isCopyrighted","emphasis","VersionID","channelMode","ChannelMode","codec","bitrateInKbps","calcBitrate","calcSamplingRate","profileIndex","codecProfile","samplingFrequencyIndex","channelIndex","mp4ChannelConfig","codecIndex","bitrate_index","sampling_rate_freq_index","SyncByte1","SyncByte2","syncFrameCount","countSkipFrameData","totalDataLength","bitrates","frame_size","crc","calculateEofDuration","samplesPerFrame","buf_frame_header","mpegOffset","syncPeek","quit","sync","parseCommonMpegHeader","numberOfSamples","hasID3v1","ID3v1","mpegSize","gotFirstSync","bo","FrameHeader","parseAdts","parseAudioFrameHeader","slot_size","samples_per_frame","bps","fsize","audioFrameHeader","skipSideInformation","areAllSame","parseCrc","framesPerSec","Token.INT16_BE","sideinfo_length","readXtraInfoHeader","headerTag","readXingInfoHeader","infoTag","skipFrameData","frameDataLeft","xingInfoTag","streamSize","lame","extended","readXingHeader","common.stripNulls","GUID","fromBin","bin","objectId","decodeMediaType","mediaType","AudioMedia","VideoMedia","CommandMedia","Degradable_JPEG_Media","FileTransferMedia","BinaryMedia","equals","toBin","parseUnicodeAttr","util.stripNulls","HeaderObject","DataObject","SimpleIndexObject","IndexObject","MediaObjectIndexObject","TimecodeIndexObject","FilePropertiesObject","StreamPropertiesObject","HeaderExtensionObject","CodecListObject","ScriptCommandObject","MarkerObject","BitrateMutualExclusionObject","ErrorCorrectionObject","ContentDescriptionObject","ExtendedContentDescriptionObject","ContentBrandingObject","StreamBitratePropertiesObject","ContentEncryptionObject","ExtendedContentEncryptionObject","DigitalSignatureObject","PaddingObject","ExtendedStreamPropertiesObject","AdvancedMutualExclusionObject","GroupMutualExclusionObject","StreamPrioritizationObject","BandwidthSharingObject","LanguageListObject","MetadataObject","MetadataLibraryObject","IndexParametersObject","MediaObjectIndexParametersObject","TimecodeIndexParametersObject","CompatibilityObject","AdvancedContentEncryptionObject","JFIF_Media","ASF_Index_Placeholder_Object","attributeParsers","parseByteArrayAttr","parseWordAttr","AsfContentParseError","TopLevelHeaderObjectToken","objectSize","numberOfHeaderObjects","HeaderObjectToken","State","postProcessTag","valueType","WmPictureToken","parseAttr","getParserForAttr","IgnoreObjectState","_buf","fileId","creationDate","dataPacketsCount","playDuration","sendDuration","preroll","broadcast","seekable","minimumDataPacketSize","maximumDataPacketSize","maximumBitrate","streamType","errorCorrectionType","reserved1","reserved2","extensionDataSize","CodecListObjectHeader","entryCount","readCodecEntries","codecHeader","readCodecEntry","readInformation","videoCodec","audioCodec","information","ContentDescriptionObjectState","contentDescTags","ExtendedContentDescriptionObjectState","attrCount","nameLen","valueLen","ExtendedStreamPropertiesObjectState","endTime","dataBitrate","bufferSize","initialBufferFullness","alternateDataBitrate","alternateBufferSize","alternateInitialBufferFullness","maximumObjectSize","reliableFlag","seekableFlag","resendLiveCleanpointsFlag","streamNumber","streamLanguageId","averageTimePerFrame","streamNameCount","payloadExtensionSystems","streamNames","streamPropertiesObject","MetadataObjectState","descriptionRecordsCount","MetadataLibraryObjectState","AsfObject.TopLevelHeaderObjectToken","parseObjectHeader","numberOfObjectHeaders","AsfObject.HeaderObjectToken","AsfObject.FilePropertiesObject","fpo","BigInt","AsfObject.StreamPropertiesObject","spo","AsfObject.HeaderExtensionObject","extHeader","parseExtensionObject","AsfObject.ContentDescriptionObjectState","addTags","AsfObject.ExtendedContentDescriptionObjectState","codecs","AsfObject.readCodecEntries","audioCodecs","AsfObject.IgnoreObjectState","extensionSize","AsfObject.ExtendedStreamPropertiesObjectState","AsfObject.MetadataObjectState","moTags","AsfObject.MetadataLibraryObjectState","mlTags","ChunkHeader64","chunkID","Token.INT64_BE","DsdiffContentParseError","readFmt8Chunks","remainingSize","chunkHeader","p0","handleSoundPropertyChunks","rst","sndPropHeader","numChannels","handleChannelChunks","compressionIdCode","compressionName","hours","samples","lsConfig","lossless","channelId","compressionTypes","NONE","sowt","fl32","fl64","alaw","ulaw","ULAW","ALAW","FL32","AiffContentError","Common","isAifc","minimumChunkSize","baseSampleRate","numSampleFrames","compressionType","strLen","isCompressed","iff.Header","nextChunk","AiffToken.Common","readTextChunk","ChunkHeader","DsdChunk","Token.INT64_LE","metadataPointer","FormatChunk","formatVersion","Token.INT32_LE","formatID","channelType","channelNum","samplingFrequency","sampleCount","blockSizePerChannel","DsdContentParseError","dsdChunk","parseChunks","formatChunk","VorbisPictureToken","fromBase64","base64str","atob","mimeLen","descLen","colour_depth","indexed_color","picDataLen","CommonHeader","packetType","vorbis","VorbisDecoder","readInt32","readStringUtf8","parseUserComment","offset0","debugInit","VorbisContentError","VorbisStream","pageSegments","parsePage","pageData","lastPageHeader","firstPage","parseFirstPage","continued","lastPage","fullPage","mergeUint8Arrays","parseFullPage","arrays","totalSize","merged","_arrays","absoluteGranulePosition","_header","commonHeader","idHeader","bitrateMax","bitrateNominal","bitrateMin","IdentificationHeader","parseUserCommentList","userCommentListLength","FlacContentError","BlockHeader","lastBlock","util.getBitAllignedNumber","BlockStreamInfo","minimumBlockSize","maximumBlockSize","minimumFrameSize","maximumFrameSize","totalSamples","vorbisParser","blockHeader","parseDataBlock","dataSize","parseBlockStreamInfo","parseComment","parsePicture","commentListLength","matroskaDtd","EbmlContentError","EbmlIterator","parserMap","ebmlMaxIDLength","ebmlMaxSizeLength","readUint","readFlag","readFloat","iterate","dtdElement","posDone","parseContainer","linkParents","tree","elementPosition","startNext","getElementPath","elementValue","readVintData","maxLength","oc","lenField","readUIntBE","normalizedNumber","cleanNumber","Token.UINT64_BE","_error","readUIntBeAsBigInt","seekHeadOffset","flagUseIndexToSkipClusters","mkvUseIndex","containerSize","matroskaIterator","seekHead","seek","ignoreSize","timecodeScale","audioTracks","codecID","codecSettings","flagDefault","flagLacing","flagEnabled","trackType","video","audioTrack","targetType","targetTypeValue","simpleTags","simpleTag","attachments","attachedFiles","Mp4ContentError","hdr","ExtendedSize","ftyp","FixedLengthAtom","expLen","atomId","SecondsSinceMacEpoch","secondsSinceUnixEpoch","MdhdAtom","creationTime","modificationTime","timeScale","MvhdAtom","preferredRate","preferredVolume","previewTime","previewDuration","posterTime","selectionTime","selectionDuration","nextTrackID","DataAtom","NameAtom","TrackHeaderAtom","alternateGroup","SampleDescriptionTable","descrLen","dataFormat","dataReferenceIndex","StsdAtom","numberOfEntries","stsdHeader","SoundSampleDescriptionVersion","SoundSampleDescriptionV0","numAudioChannels","compressionId","packetSize","SimpleTableAtom","nrOfEntries","Token.INT24_BE","readTokenTable","TimeToSampleToken","SttsAtom","SampleToChunkToken","samplesPerChunk","sampleDescriptionId","StscAtom","StszAtom","StcoAtom","ChapterText","titleLen","remainingLen","TrackFragmentHeaderBox","flagOffset","baseDataOffsetPresent","sampleDescriptionIndexPresent","defaultSampleDurationPresent","defaultSampleSizePresent","defaultSampleFlagsPresent","defaultDurationIsEmpty","defaultBaseIsMoof","dynOffset","baseDataOffset","sampleDescriptionIndex","defaultSampleDuration","defaultSampleSize","defaultSampleFlags","TrackRunBox","trun","dataOffsetPresent","firstSampleFlagsPresent","sampleDurationPresent","sampleSizePresent","sampleFlagsPresent","sampleCompositionTimeOffsetsPresent","dataOffset","firstSampleFlags","sampleDuration","sampleFlags","sampleCompositionTimeOffset","HandlerBox","charTypeToken","componentType","handlerType","componentName","ChapterTrackReferenceBox","Atom","readAtom","dataHandler","AtomToken.Header","AtomToken.ExtendedSize","atomBean","payloadLength","getPayloadLength","atomPath","getHeaderLength","readAtoms","paddingLength","encoderDict","lossy","MAC3","MAC6","ima4","Qclp","alac","mp4a","mp4s","c608","c708","distinct","hasVideoTrack","hasAudioTrack","atomParsers","mvhd","AtomToken.MvhdAtom","chap","getTrackDescription","chapterList","mdat","audioLengthInBytes","calculateBitRate","includeChapters","trackWithChapters","chapterTrackIds","chapterTracks","parseChapterTrack","types","ftype","AtomToken.ftyp","stsd","AtomToken.StsdAtom","soundSampleDescription","dfEntry","parseSoundSampleDescription","stsz","AtomToken.StszAtom","sampleSizeTable","read_BE_Integer","integerType","Token","remainingFileSize","errMsg","rootAtom","atom","handleAtom","formatList","trackFormats","ssd","encoderInfo","bitDepth","fragments","totalTimeUnits","defaultDuration","trackRun","dur","timeToSampleTable","ttstEntry","parseMetadataItemData","parseTrackBox","parseTrackFragmentBox","metaAtom","tagKey","payLoadLength","parseValueAtom","AtomToken.NameAtom","dataAtom","AtomToken.DataAtom","genreInt","genreStr","trakBox","AtomToken.TrackHeaderAtom","AtomToken.HandlerBox","mdhd_data","AtomToken.MdhdAtom","stco","AtomToken.StcoAtom","chunkOffsetTable","stsc","AtomToken.StscAtom","sampleToChunkTable","stts","AtomToken.SttsAtom","trafBox","tfhd","fragmentHeaderBox","AtomToken.TrackFragmentHeaderBox","trackRunBox","AtomToken.TrackRunBox","sampleDescription","AtomToken.SoundSampleDescriptionVersion","AtomToken.SoundSampleDescriptionV0","chapterTrack","chapters","nextChunkLen","AtomToken.ChapterText","chapter","sampleOffset","findSampleOffset","chapterOffset","chunkIndex","getChunkDuration","ttsi","ttsc","ttsd","curChunkId","getSamplesPerChunk","totalDuration","nrOfSamples","stcTable","PacketKey","SH_part1","streamVersion","SH_part3","sampleFrequency","maxUsedBands","msUsed","audioBlockFrames","StreamReader","_tokenizer","readPacketHeader","readVariableSizeField","readStreamHeader","streamHeader","part1","beginningOfSilence","part3","hb","MusepackContentError","MpcSv8Parser","audioLength","parsePacket","sv8reader","SV8.StreamReader","sh","BitReader","dword","remainder","numOfWords","streamMinorVersion","streamMajorVersion","maxLevel","profile","maxBand","intensityStereo","midSideStereo","titlePeak","titleGain","albumPeak","albumGain","lastFrameLength","trueGapless","MpcSv7Parser","bitreader","SV7.Header","skipAudioData","mpcParser","OpusContentError","IdHeader","magicSignature","preSkip","inputSampleRate","outputGain","channelMapping","OpusStream","lastPos","Opus.IdHeader","pos_48bit","SpeexStream","speexHeader","speex","version_id","header_size","mode_bitstream_version","nb_channels","vbr","frames_per_packet","extra_headers","Speex.Header","TheoraStream","vmaj","vmin","vrev","vmbw","vmbh","nombr","nqual","PageHeader","capturePattern","streamSerialNumber","pageSequenceNo","pageChecksum","page_segments","SegmentTable","totalPageSize","OggContentError","OggStream","streamSerial","pageNumber","segmentTable","idData","pageConsumer","streams","SampleRates","BlockHeaderToken","BlockID","blockSize","blockIndex","blockSamples","isMono","isHybrid","isJointStereo","crossChannel","hybridNoiseShaping","floatingPoint","isDSD","MetadataIdToken","functionId","isOptional","isOddSize","largeBlock","WavPackContentError","audioDataSize","parseWavPackBlocks","ignoreBytes","parseMetadataSubBlock","remainingLength","dataSizeInWords","Token.UINT24_LE","mp","ListInfoTagValue","tagHeader","WaveContentError","WaveFormat","WaveFormatNameMap","WaveFormat_PCM","WaveFormat_ADPCM","WaveFormat_IEEE_FLOAT","WaveFormat_MPEG_ADTS_AAC","WaveFormat_MPEG_LOAS","WaveFormat_RAW_AAC1","WaveFormat_DOLBY_AC3_SPDIF","WaveFormat_DVM","WaveFormat_RAW_SPORT","WaveFormat_ESST_AC3","WaveFormat_DRM","WaveFormat_DTS2","WaveFormat_MPEG","Format","wFormatTag","nChannels","nSamplesPerSec","nAvgBytesPerSec","nBlockAlign","wBitsPerSample","FactChunk","dwSampleLength","BroadcastAudioExtensionChunk","originator","originatorReference","originationDate","originationTime","timeReferenceLow","timeReferenceHigh","umid","loudnessValue","maxTruePeakLevel","maxMomentaryLoudness","maxShortTermLoudness","blockAlign","riffHeader","riff.Header","parseRiffChunk","readWaveChunk","parseListTag","fact","WaveChunk.FactChunk","fmt","WaveChunk.Format","subFormat","WaveChunk.WaveFormatNameMap","calcRemaining","bext","bextRemaining","listHeader","listType","parseRiffInfoTags","valueToken","riff.ListInfoTagValue"],"mappings":"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,IAAK,MACLC,KAAM,cAKR,GAAIr+B,KAAKyhB,MAAM,CAAC,GAAO,CAACG,OAAQA,EAAS,EAAG4c,KAAM,CAAC,KAClD,MAAO,CACNJ,IAAK,MACLC,KAAM,aAGR,CACD,EAGiC,IAAIsF,IChzDb,CACzB,MACA,MACA,OACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,OACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,MACA,MACA,OACA,MACA,QACA,MACA,MACA,MACA,OACA,OACA,QACA,MACA,MACA,MACA,MACA,MACA,MACA,KACA,KACA,SACA,MACA,MACA,MACA,MACA,MACA,KACA,MACA,IACA,KACA,MACA,MACA,MACA,QACA,MACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,MACA,MACA,MACA,KACA,MACA,MACA,MACA,OACA,MACA,MACA,QACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,QACA,MACA,MACA,MACA,KACA,MACA,KACA,MACA,OACA,MACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,UACA,QACA,MACA,OACA,MACA,OACA,MACA,MACA,OACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,MACA,KACA,OACA,SDkoDiC,IAAIA,IC/nDb,CACxB,aACA,YACA,YACA,aACA,aACA,cACA,oBACA,oBACA,aACA,YACA,qBACA,4BACA,yBACA,uBACA,0BACA,0DACA,0CACA,iDACA,kDACA,0EACA,4EACA,oEACA,yEACA,kBACA,oBACA,+BACA,mBACA,sBACA,8BACA,gCACA,oCACA,YACA,aACA,iBACA,aACA,kBACA,gBACA,YACA,cACA,iBACA,iBACA,yBACA,aACA,aACA,aACA,YACA,YACA,YACA,yBACA,kBACA,aACA,YACA,gBACA,YACA,kBACA,oBACA,4BACA,2BACA,gCACA,kBACA,mBACA,YACA,aACA,gCACA,WACA,WACA,kBACA,eACA,cACA,yBACA,kBACA,mBACA,wBACA,iCACA,wCACA,oCACA,oBACA,6BACA,oBACA,yBACA,qBACA,oBACA,oBACA,kBACA,aACA,wBACA,YACA,YACA,YACA,YACA,YACA,YACA,aACA,kBACA,iCACA,aACA,sBACA,aACA,sBACA,aACA,YACA,oBACA,mBACA,gBACA,aACA,WACA,oBACA,+BACA,cACA,4BACA,4BACA,cACA,yBACA,cACA,aACA,sBACA,mBACA,oBACA,oBACA,wBACA,uBACA,cACA,cACA,2BACA,YACA,aACA,cACA,aACA,aACA,aACA,+BACA,aACA,+BACA,4BACA,qBACA,YACA,8BACA,YACA,YACA,mBACA,YACA,6BACA,gBACA,iCACA,sBACA,oBACA,qBACA,+BACA,mBACA,6BACA,6BACA,wBACA,0CACA,+BACA,oBACA,wEACA,uEACA,0EACA,oDACA,mDACA,0DACA,2DACA,8CACA,uDACA,iDACA,mDACA,mDACA,yDACA,6DACA,2BACA,2CCvUGC,GAAe,mKACfC,GAAc,wCACdC,GAAe,gCAQfC,GAAc,6BAKdC,GAAe,WASfC,GAAc,6DA4JlB,SAASC,GAAS/P,GAChB,IAAIqC,EAAMtzB,OAAOixB,GAGjB,GAAI2P,GAAa15B,KAAKosB,GACpB,OAAOA,EAGT,GAAIA,EAAI33B,OAAS,IAAMglC,GAAYz5B,KAAKosB,GACtC,MAAM,IAAI1hB,UAAU,2BAGtB,MAAO,IAAM0hB,EAAI72B,QAAQqkC,GAAc,QAAU,GACnD,CAMA,SAASG,GAAa15B,GACpBzK,KAAKokC,WAAa/8B,OAAOC,OAAO,MAChCtH,KAAKyK,KAAOA,CACd,CA3KA45B,GAAArQ,OAW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AUrT,MACnDhtB,EAAU,KACV,OAASsmC,EAAa//B,eACpB,OAAS+/B,EAAa//B,cAAc85B,YACnCrgC,EAAUsmC,EAAa//B,cAAc85B,UAAUrT,MAClDhtB,IAAYqtC,IACT,MAAQrtC,GAAWA,EAAQ6rB,WAC5B,MAAQwhB,GAAiBvhB,GAAauhB,GAC1C,CACA,SAASC,GAA8BttC,EAASsmC,GAC9CtmC,EAAU,KACV,OAASsmC,EAAangC,YACnBnG,EAAUsmC,EAAangC,UAAUI,cAActH,QAClDqnC,EAAeA,EAAa//B,cAActH,SACzBe,IACdsmC,EAAaza,WAAY,MAAQ7rB,GAAW8rB,GAAa9rB,GAC9D,CACA,SAASutC,GACPljG,EACAkhG,EACAiC,EACAC,GAEA,GAA+B,MAA3BlC,EAAYhmB,aACd,IAAKgmB,EAAcA,EAAYjuC,MAAO,OAASiuC,GAC7CmC,GACErjG,EACAkhG,EACAiC,EACAC,GAEClC,EAAcA,EAAY5kC,OACnC,CACA,SAAS+mC,GACPnE,EACAjD,EACAkH,EACAC,GAEA,IAAInpF,EAAQgiF,EAAahiF,MACzB,OAAQgiF,EAAanzD,KACnB,KAAK,EACL,KAAK,GACL,KAAK,GACHo6D,GACEhE,EACAjD,EACAkH,EACAC,GAEM,KAARnpF,GAAgB+hF,GAA0B,EAAGC,GAC7C,MACF,KAAK,EAuDL,KAAK,GAiDL,QACEiH,GACEhE,EACAjD,EACAkH,EACAC,SArGJ,KAAK,EACHF,GACEhE,EACAjD,EACAkH,EACAC,GAEM,KAARnpF,IACIilF,EAAe,KACjB,OAASjD,EAAangC,YACnBojC,EAAejD,EAAangC,UAAUI,cAActH,QACtDqnC,EAAeA,EAAa//B,cAActH,SAC1BsqC,IACdjD,EAAaza,WACd,MAAQ0d,GAAgBzd,GAAayd,KACzC,MACF,KAAK,GACH,GAAY,KAARjlF,EAAc,CAChBipF,GACEhE,EACAjD,EACAkH,EACAC,GAEFlE,EAAejD,EAAan5B,UAC5B,IACE,IAAIwgC,EAAyBrH,EAAahhB,cACxCvxE,EAAK45F,EAAuB55F,GAC5B65F,EAAeD,EAAuBC,aACxC,mBAAsBA,GACpBA,EACE75F,EACA,OAASuyF,EAAangC,UAAY,QAAU,SAC5CojC,EAAasE,uBACZ,EAEN,CAAC,MAAOpkG,GACP+8F,GAAwBF,EAAcA,EAAalgC,OAAQ38D,EAC5D,CACF,MACC8jG,GACEhE,EACAjD,EACAkH,EACAC,GAEJ,MASF,KAAK,GACH,MACF,KAAK,GACHE,EAAyBrH,EAAan5B,UACtCp5D,EAAKuyF,EAAangC,UAClB,OAASmgC,EAAa//B,cACmB,EAArConC,EAAuB/oB,YACrB2oB,GACEhE,EACAjD,EACAkH,EACAC,GAEFK,GAAwCvE,EAAcjD,GACnB,EAArCqH,EAAuB/oB,YACrB2oB,GACEhE,EACAjD,EACAkH,EACAC,IAEAE,EAAuB/oB,aAAe,EACxCmpB,GACExE,EACAjD,EACAkH,EACAC,KACmC,MAA5BnH,EAAa/gB,gBAEpB,KAARjhE,GAAgB8oF,GAAmCr5F,EAAIuyF,GACvD,MACF,KAAK,GACHiH,GACEhE,EACAjD,EACAkH,EACAC,GAEM,KAARnpF,GACEgpF,GAA8BhH,EAAangC,UAAWmgC,GAU9D,CACA,SAASyH,GACPb,EACA3B,EACAyC,EACAC,EACAd,GAIA,IAFAA,EACEA,MAAkE,MAA3B5B,EAAYhmB,cAChDgmB,EAAcA,EAAYjuC,MAAO,OAASiuC,GAAe,CAC5D,IAAIhC,EAAe2D,EACjB5G,EAAeiF,EACfiC,EAAiBQ,EACjBP,EAAuBQ,EACvB3pF,EAAQgiF,EAAahiF,MACvB,OAAQgiF,EAAanzD,KACnB,KAAK,EACL,KAAK,GACL,KAAK,GACH46D,GACExE,EACAjD,EACAkH,EACAC,EACAN,GAEF9G,GAA0B,EAAGC,GAC7B,MACF,KAAK,GACH,MACF,KAAK,GACH,IAAIhe,EAAWge,EAAan5B,UAC5B,OAASm5B,EAAa//B,cACK,EAAvB+hB,EAAS1D,YACPmpB,GACExE,EACAjD,EACAkH,EACAC,EACAN,GAEFW,GACEvE,EACAjD,IAEFhe,EAAS1D,aAAe,EAC1BmpB,GACExE,EACAjD,EACAkH,EACAC,EACAN,IAENA,GACU,KA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AEkC,CAClC,GACE2nC,KACC0C,EACD,CACAvoG,EAAKsoG,4BAA8BF,EACnCtC,IACEsC,EACFjB,EAAa,EACb,MAAM1wG,CACP,CACD2xG,EAAsB/oB,GACtBA,GAAsC8nB,EACtC,OAASiB,IACN,OAAS/oB,GACLA,GAAsC+oB,EACvC/oB,GAAoCtnF,KAAKmO,MACvCm5E,GACA+oB,GAET,CACDjB,EAAajpC,CACd,CAED,GADAkqC,GAAsB,EAClB,IAAMjB,EAAY,QACvB,CACF,CACD,GAAI,IAAMA,EAAY,CACpBP,GAAkB3F,EAAe,GACjC4F,GAAkB5F,EAAevhC,EAAO,GAAG,GAC3C,KACD,CACDjpE,EAAG,CAGD,OAFAwwG,EAAkBhG,EAClBmH,EAAsBjB,GAEpB,KAAK,EACL,KAAK,EACH,MAAMjwG,MAAM0hE,GAAuB,MACrC,KAAK,EACH,IAAa,QAAR8G,KAAqBA,EAAO,MACnC,KAAK,EACHmnC,GACEI,EACAvnC,EACA63B,IACCoO,IAEH,MAAMlvG,EACR,KAAK,EACH4oF,GAAsC,KACtC,MACF,KAAK,EACL,KAAK,EACH,MACF,QACE,MAAMnoF,MAAM0hE,GAAuB,MAEvC,IACW,SAAR8G,KAAsBA,GAEvB,IADEynC,EAAa/E,GAA+B,IAAMr2C,MAFtD,CAWE,GANA86C,GACEI,EACAvnC,EACA63B,IACCoO,IAEC,IAAM/lC,GAAaqnC,EAAiB,GAAG,GAAK,MAAMxwG,EACtDwwG,EAAgBuB,cAAgBC,GAC9BC,GAAoBze,KAClB,KACAgd,EACAD,EACA3nB,GACA6mB,GACAD,GACAvmC,EACA63B,GACAuO,GACApL,GACAiL,GACAyC,EACA,GACC,EACD,GAEFjB,EAGH,MACDuB,GACEzB,EACAD,EACA3nB,GACA6mB,GACAD,GACAvmC,EACA63B,GACAuO,GACApL,GACAiL,GACAyC,EACA,GACC,EACD,EAEH,CAEH,KAxIG,CAHCjB,EAAagB,GAAelH,EAAevhC,GAAO,GAClD0oC,GAAsB,CA2I3B,CACDtB,GAAsB7F,EACxB,CACA,SAASyH,GACP1oG,EACAi8F,EACA0M,EACAC,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AU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAC1B,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACtF,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACtF,IAAU,IAAM,IAAU,IAC1B,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,KAAM,IA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","x_google_ignoreList":[0,1,2,3,4,5,6,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,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,101,106,125,137,140,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,234,235,236,237,238,239,253,254,255,256,257,258,259,260,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311]}