mirror of
https://github.com/owntone/owntone-server.git
synced 2025-01-01 01:53:23 -05:00
1 line
918 KiB
Plaintext
1 line
918 KiB
Plaintext
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/templates/ContentWithHero.vue?d140","webpack:///./src/templates/ContentWithHero.vue?d31a","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/App.vue?ad04","webpack:///./src/components/NavbarTop.vue?4e1d","webpack:///./src/components/NavbarItemLink.vue?4055","webpack:///./src/store/mutation_types.js","webpack:///src/components/NavbarItemLink.vue","webpack:///./src/components/NavbarItemLink.vue?f454","webpack:///./src/components/NavbarItemLink.vue","webpack:///src/components/NavbarTop.vue","webpack:///./src/components/NavbarTop.vue?ed2c","webpack:///./src/components/NavbarTop.vue","webpack:///./src/components/NavbarBottom.vue?09f9","webpack:///./src/store/index.js","webpack:///./src/webapi/index.js","webpack:///./src/audio.js","webpack:///./src/components/NavbarItemOutput.vue?d47a","webpack:///src/components/NavbarItemOutput.vue","webpack:///./src/components/NavbarItemOutput.vue?d1f9","webpack:///./src/components/NavbarItemOutput.vue","webpack:///./src/components/PlayerButtonPlayPause.vue?a817","webpack:///src/components/PlayerButtonPlayPause.vue","webpack:///./src/components/PlayerButtonPlayPause.vue?0b3b","webpack:///./src/components/PlayerButtonPlayPause.vue","webpack:///./src/components/PlayerButtonNext.vue?34b6","webpack:///src/components/PlayerButtonNext.vue","webpack:///./src/components/PlayerButtonNext.vue?c0a7","webpack:///./src/components/PlayerButtonNext.vue","webpack:///./src/components/PlayerButtonPrevious.vue?157a","webpack:///src/components/PlayerButtonPrevious.vue","webpack:///./src/components/PlayerButtonPrevious.vue?d68c","webpack:///./src/components/PlayerButtonPrevious.vue","webpack:///./src/components/PlayerButtonShuffle.vue?b33a","webpack:///src/components/PlayerButtonShuffle.vue","webpack:///./src/components/PlayerButtonShuffle.vue?0f56","webpack:///./src/components/PlayerButtonShuffle.vue","webpack:///./src/components/PlayerButtonConsume.vue?233e","webpack:///src/components/PlayerButtonConsume.vue","webpack:///./src/components/PlayerButtonConsume.vue?00d5","webpack:///./src/components/PlayerButtonConsume.vue","webpack:///./src/components/PlayerButtonRepeat.vue?07cf","webpack:///src/components/PlayerButtonRepeat.vue","webpack:///./src/components/PlayerButtonRepeat.vue?973c","webpack:///./src/components/PlayerButtonRepeat.vue","webpack:///./src/components/PlayerButtonSeekBack.vue?29b6","webpack:///src/components/PlayerButtonSeekBack.vue","webpack:///./src/components/PlayerButtonSeekBack.vue?2c96","webpack:///./src/components/PlayerButtonSeekBack.vue","webpack:///./src/components/PlayerButtonSeekForward.vue?a259","webpack:///src/components/PlayerButtonSeekForward.vue","webpack:///./src/components/PlayerButtonSeekForward.vue?cd88","webpack:///./src/components/PlayerButtonSeekForward.vue","webpack:///src/components/NavbarBottom.vue","webpack:///./src/components/NavbarBottom.vue?09f6","webpack:///./src/components/NavbarBottom.vue","webpack:///./src/components/Notifications.vue?6edd","webpack:///src/components/Notifications.vue","webpack:///./src/components/Notifications.vue?0fdb","webpack:///./src/components/Notifications.vue","webpack:///./src/components/ModalDialogRemotePairing.vue?f565","webpack:///src/components/ModalDialogRemotePairing.vue","webpack:///./src/components/ModalDialogRemotePairing.vue?2812","webpack:///./src/components/ModalDialogRemotePairing.vue","webpack:///./src/components/ModalDialogUpdate.vue?04cb","webpack:///./src/components/ModalDialog.vue?91a2","webpack:///src/components/ModalDialog.vue","webpack:///./src/components/ModalDialog.vue?47be","webpack:///./src/components/ModalDialog.vue","webpack:///src/components/ModalDialogUpdate.vue","webpack:///./src/components/ModalDialogUpdate.vue?e923","webpack:///./src/components/ModalDialogUpdate.vue","webpack:///src/App.vue","webpack:///./src/App.vue?4c4f","webpack:///./src/App.vue","webpack:///./src/pages/PageQueue.vue?4728","webpack:///./src/templates/ContentWithHeading.vue?24e8","webpack:///src/templates/ContentWithHeading.vue","webpack:///./src/templates/ContentWithHeading.vue?5b75","webpack:///./src/templates/ContentWithHeading.vue","webpack:///./src/components/ListItemQueueItem.vue?bcf9","webpack:///src/components/ListItemQueueItem.vue","webpack:///./src/components/ListItemQueueItem.vue?9658","webpack:///./src/components/ListItemQueueItem.vue","webpack:///./src/components/ModalDialogQueueItem.vue?b7c3","webpack:///src/components/ModalDialogQueueItem.vue","webpack:///./src/components/ModalDialogQueueItem.vue?54a8","webpack:///./src/components/ModalDialogQueueItem.vue","webpack:///./src/components/ModalDialogAddUrlStream.vue?d821","webpack:///src/components/ModalDialogAddUrlStream.vue","webpack:///./src/components/ModalDialogAddUrlStream.vue?61dc","webpack:///./src/components/ModalDialogAddUrlStream.vue","webpack:///./src/components/ModalDialogPlaylistSave.vue?b32f","webpack:///src/components/ModalDialogPlaylistSave.vue","webpack:///./src/components/ModalDialogPlaylistSave.vue?2288","webpack:///./src/components/ModalDialogPlaylistSave.vue","webpack:///src/pages/PageQueue.vue","webpack:///./src/pages/PageQueue.vue?bb54","webpack:///./src/pages/PageQueue.vue","webpack:///./src/pages/PageNowPlaying.vue?df62","webpack:///./src/components/CoverArtwork.vue?b8b9","webpack:///./src/lib/SVGRenderer.js","webpack:///src/components/CoverArtwork.vue","webpack:///./src/components/CoverArtwork.vue?2f9d","webpack:///./src/components/CoverArtwork.vue","webpack:///src/pages/PageNowPlaying.vue","webpack:///./src/pages/PageNowPlaying.vue?1bb5","webpack:///./src/pages/PageNowPlaying.vue","webpack:///./src/pages/PageBrowse.vue?e137","webpack:///./src/pages/mixin.js","webpack:///./src/components/TabsMusic.vue?d9b1","webpack:///src/components/TabsMusic.vue","webpack:///./src/components/TabsMusic.vue?2c34","webpack:///./src/components/TabsMusic.vue","webpack:///./src/components/ListAlbums.vue?e135","webpack:///./src/components/ListItemAlbum.vue?29a6","webpack:///src/components/ListItemAlbum.vue","webpack:///./src/components/ListItemAlbum.vue?68d6","webpack:///./src/components/ListItemAlbum.vue","webpack:///./src/components/ModalDialogAlbum.vue?4e44","webpack:///src/components/ModalDialogAlbum.vue","webpack:///./src/components/ModalDialogAlbum.vue?e19e","webpack:///./src/components/ModalDialogAlbum.vue","webpack:///./src/lib/Albums.js","webpack:///src/components/ListAlbums.vue","webpack:///./src/components/ListAlbums.vue?3572","webpack:///./src/components/ListAlbums.vue","webpack:///./src/components/ListTracks.vue?7225","webpack:///./src/components/ListItemTrack.vue?8305","webpack:///src/components/ListItemTrack.vue","webpack:///./src/components/ListItemTrack.vue?2d44","webpack:///./src/components/ListItemTrack.vue","webpack:///./src/components/ModalDialogTrack.vue?cc9f","webpack:///src/components/ModalDialogTrack.vue","webpack:///./src/components/ModalDialogTrack.vue?929e","webpack:///./src/components/ModalDialogTrack.vue","webpack:///src/components/ListTracks.vue","webpack:///./src/components/ListTracks.vue?b270","webpack:///./src/components/ListTracks.vue","webpack:///src/pages/PageBrowse.vue","webpack:///./src/pages/PageBrowse.vue?c901","webpack:///./src/pages/PageBrowse.vue","webpack:///./src/pages/PageBrowseRecentlyAdded.vue?9928","webpack:///src/pages/PageBrowseRecentlyAdded.vue","webpack:///./src/pages/PageBrowseRecentlyAdded.vue?469c","webpack:///./src/pages/PageBrowseRecentlyAdded.vue","webpack:///./src/pages/PageBrowseRecentlyPlayed.vue?000c","webpack:///src/pages/PageBrowseRecentlyPlayed.vue","webpack:///./src/pages/PageBrowseRecentlyPlayed.vue?093a","webpack:///./src/pages/PageBrowseRecentlyPlayed.vue","webpack:///./src/pages/PageArtists.vue?277a","webpack:///./src/components/IndexButtonList.vue?9d3d","webpack:///src/components/IndexButtonList.vue","webpack:///./src/components/IndexButtonList.vue?ce88","webpack:///./src/components/IndexButtonList.vue","webpack:///./src/components/ListArtists.vue?b0aa","webpack:///./src/components/ListItemArtist.vue?0852","webpack:///src/components/ListItemArtist.vue","webpack:///./src/components/ListItemArtist.vue?12cc","webpack:///./src/components/ListItemArtist.vue","webpack:///./src/components/ModalDialogArtist.vue?ed19","webpack:///src/components/ModalDialogArtist.vue","webpack:///./src/components/ModalDialogArtist.vue?c19b","webpack:///./src/components/ModalDialogArtist.vue","webpack:///./src/lib/Artists.js","webpack:///src/components/ListArtists.vue","webpack:///./src/components/ListArtists.vue?bee2","webpack:///./src/components/ListArtists.vue","webpack:///./src/components/DropdownMenu.vue?aa50","webpack:///src/components/DropdownMenu.vue","webpack:///./src/components/DropdownMenu.vue?4869","webpack:///./src/components/DropdownMenu.vue","webpack:///src/pages/PageArtists.vue","webpack:///./src/pages/PageArtists.vue?3bfb","webpack:///./src/pages/PageArtists.vue","webpack:///./src/pages/PageArtist.vue?ba98","webpack:///src/pages/PageArtist.vue","webpack:///./src/pages/PageArtist.vue?7daa","webpack:///./src/pages/PageArtist.vue","webpack:///./src/pages/PageAlbums.vue?8353","webpack:///src/pages/PageAlbums.vue","webpack:///./src/pages/PageAlbums.vue?afe8","webpack:///./src/pages/PageAlbums.vue","webpack:///./src/pages/PageAlbum.vue?8fb2","webpack:///src/pages/PageAlbum.vue","webpack:///./src/pages/PageAlbum.vue?63e0","webpack:///./src/pages/PageAlbum.vue","webpack:///./src/pages/PageGenres.vue?d6b2","webpack:///./src/components/ListItemGenre.vue?10c8","webpack:///src/components/ListItemGenre.vue","webpack:///./src/components/ListItemGenre.vue?ce0e","webpack:///./src/components/ListItemGenre.vue","webpack:///./src/components/ModalDialogGenre.vue?5e7b","webpack:///src/components/ModalDialogGenre.vue","webpack:///./src/components/ModalDialogGenre.vue?8003","webpack:///./src/components/ModalDialogGenre.vue","webpack:///src/pages/PageGenres.vue","webpack:///./src/pages/PageGenres.vue?1eaa","webpack:///./src/pages/PageGenres.vue","webpack:///./src/pages/PageGenre.vue?30b3","webpack:///src/pages/PageGenre.vue","webpack:///./src/pages/PageGenre.vue?ef74","webpack:///./src/pages/PageGenre.vue","webpack:///./src/pages/PageGenreTracks.vue?534e","webpack:///src/pages/PageGenreTracks.vue","webpack:///./src/pages/PageGenreTracks.vue?f0d8","webpack:///./src/pages/PageGenreTracks.vue","webpack:///./src/pages/PageArtistTracks.vue?db5d","webpack:///src/pages/PageArtistTracks.vue","webpack:///./src/pages/PageArtistTracks.vue?12ba","webpack:///./src/pages/PageArtistTracks.vue","webpack:///./src/pages/PageComposers.vue?db6f","webpack:///./src/components/ListComposers.vue?7101","webpack:///./src/components/ListItemComposer.vue?4338","webpack:///src/components/ListItemComposer.vue","webpack:///./src/components/ListItemComposer.vue?5fc5","webpack:///./src/components/ListItemComposer.vue","webpack:///./src/components/ModalDialogComposer.vue?f98a","webpack:///src/components/ModalDialogComposer.vue","webpack:///./src/components/ModalDialogComposer.vue?6827","webpack:///./src/components/ModalDialogComposer.vue","webpack:///./src/lib/Composers.js","webpack:///src/components/ListComposers.vue","webpack:///./src/components/ListComposers.vue?15a5","webpack:///./src/components/ListComposers.vue","webpack:///src/pages/PageComposers.vue","webpack:///./src/pages/PageComposers.vue?ec34","webpack:///./src/pages/PageComposers.vue","webpack:///./src/pages/PageComposer.vue?c685","webpack:///src/pages/PageComposer.vue","webpack:///./src/pages/PageComposer.vue?7007","webpack:///./src/pages/PageComposer.vue","webpack:///./src/pages/PageComposerTracks.vue?2e30","webpack:///src/pages/PageComposerTracks.vue","webpack:///./src/pages/PageComposerTracks.vue?4724","webpack:///./src/pages/PageComposerTracks.vue","webpack:///./src/pages/PagePodcasts.vue?48b4","webpack:///./src/components/ModalDialogAddRss.vue?5a48","webpack:///src/components/ModalDialogAddRss.vue","webpack:///./src/components/ModalDialogAddRss.vue?3097","webpack:///./src/components/ModalDialogAddRss.vue","webpack:///src/pages/PagePodcasts.vue","webpack:///./src/pages/PagePodcasts.vue?33ba","webpack:///./src/pages/PagePodcasts.vue","webpack:///./src/pages/PagePodcast.vue?6d11","webpack:///src/pages/PagePodcast.vue","webpack:///./src/pages/PagePodcast.vue?1d20","webpack:///./src/pages/PagePodcast.vue","webpack:///./src/pages/PageAudiobooksAlbums.vue?2468","webpack:///./src/components/TabsAudiobooks.vue?16f5","webpack:///src/components/TabsAudiobooks.vue","webpack:///./src/components/TabsAudiobooks.vue?52b9","webpack:///./src/components/TabsAudiobooks.vue","webpack:///src/pages/PageAudiobooksAlbums.vue","webpack:///./src/pages/PageAudiobooksAlbums.vue?b52a","webpack:///./src/pages/PageAudiobooksAlbums.vue","webpack:///./src/pages/PageAudiobooksArtists.vue?3015","webpack:///src/pages/PageAudiobooksArtists.vue","webpack:///./src/pages/PageAudiobooksArtists.vue?5c0a","webpack:///./src/pages/PageAudiobooksArtists.vue","webpack:///./src/pages/PageAudiobooksArtist.vue?5cc8","webpack:///src/pages/PageAudiobooksArtist.vue","webpack:///./src/pages/PageAudiobooksArtist.vue?fd67","webpack:///./src/pages/PageAudiobooksArtist.vue","webpack:///./src/pages/PageAudiobooksAlbum.vue?9477","webpack:///src/pages/PageAudiobooksAlbum.vue","webpack:///./src/pages/PageAudiobooksAlbum.vue?c4cb","webpack:///./src/pages/PageAudiobooksAlbum.vue","webpack:///./src/pages/PagePlaylists.vue?9687","webpack:///./src/components/ListPlaylists.vue?7843","webpack:///./src/components/ListItemPlaylist.vue?52bc","webpack:///src/components/ListItemPlaylist.vue","webpack:///./src/components/ListItemPlaylist.vue?27db","webpack:///./src/components/ListItemPlaylist.vue","webpack:///./src/components/ModalDialogPlaylist.vue?c949","webpack:///src/components/ModalDialogPlaylist.vue","webpack:///./src/components/ModalDialogPlaylist.vue?ae9c","webpack:///./src/components/ModalDialogPlaylist.vue","webpack:///src/components/ListPlaylists.vue","webpack:///./src/components/ListPlaylists.vue?bd85","webpack:///./src/components/ListPlaylists.vue","webpack:///src/pages/PagePlaylists.vue","webpack:///./src/pages/PagePlaylists.vue?9ae3","webpack:///./src/pages/PagePlaylists.vue","webpack:///./src/pages/PagePlaylist.vue?a344","webpack:///src/pages/PagePlaylist.vue","webpack:///./src/pages/PagePlaylist.vue?0388","webpack:///./src/pages/PagePlaylist.vue","webpack:///./src/pages/PageFiles.vue?daa0","webpack:///./src/components/ListItemDirectory.vue?7514","webpack:///src/components/ListItemDirectory.vue","webpack:///./src/components/ListItemDirectory.vue?757a","webpack:///./src/components/ListItemDirectory.vue","webpack:///./src/components/ModalDialogDirectory.vue?8626","webpack:///src/components/ModalDialogDirectory.vue","webpack:///./src/components/ModalDialogDirectory.vue?c791","webpack:///./src/components/ModalDialogDirectory.vue","webpack:///src/pages/PageFiles.vue","webpack:///./src/pages/PageFiles.vue?2428","webpack:///./src/pages/PageFiles.vue","webpack:///./src/pages/PageRadioStreams.vue?b613","webpack:///src/pages/PageRadioStreams.vue","webpack:///./src/pages/PageRadioStreams.vue?937e","webpack:///./src/pages/PageRadioStreams.vue","webpack:///./src/pages/PageSearch.vue?d5fb","webpack:///./src/templates/ContentText.vue?5c44","webpack:///src/templates/ContentText.vue","webpack:///./src/templates/ContentText.vue?ef92","webpack:///./src/templates/ContentText.vue","webpack:///./src/components/TabsSearch.vue?5c3f","webpack:///src/components/TabsSearch.vue","webpack:///./src/components/TabsSearch.vue?925a","webpack:///./src/components/TabsSearch.vue","webpack:///src/pages/PageSearch.vue","webpack:///./src/pages/PageSearch.vue?4261","webpack:///./src/pages/PageSearch.vue","webpack:///./src/pages/PageAbout.vue?2e2d","webpack:///src/pages/PageAbout.vue","webpack:///./src/pages/PageAbout.vue?cc77","webpack:///./src/pages/PageAbout.vue","webpack:///./src/pages/SpotifyPageBrowse.vue?6386","webpack:///./src/components/SpotifyListItemAlbum.vue?3938","webpack:///src/components/SpotifyListItemAlbum.vue","webpack:///./src/components/SpotifyListItemAlbum.vue?66ed","webpack:///./src/components/SpotifyListItemAlbum.vue","webpack:///./src/components/SpotifyListItemPlaylist.vue?e6aa","webpack:///src/components/SpotifyListItemPlaylist.vue","webpack:///./src/components/SpotifyListItemPlaylist.vue?b18f","webpack:///./src/components/SpotifyListItemPlaylist.vue","webpack:///./src/components/SpotifyModalDialogAlbum.vue?8d95","webpack:///src/components/SpotifyModalDialogAlbum.vue","webpack:///./src/components/SpotifyModalDialogAlbum.vue?8889","webpack:///./src/components/SpotifyModalDialogAlbum.vue","webpack:///./src/components/SpotifyModalDialogPlaylist.vue?2aec","webpack:///src/components/SpotifyModalDialogPlaylist.vue","webpack:///./src/components/SpotifyModalDialogPlaylist.vue?a0a6","webpack:///./src/components/SpotifyModalDialogPlaylist.vue","webpack:///src/pages/SpotifyPageBrowse.vue","webpack:///./src/pages/SpotifyPageBrowse.vue?49df","webpack:///./src/pages/SpotifyPageBrowse.vue","webpack:///./src/pages/SpotifyPageBrowseNewReleases.vue?a918","webpack:///src/pages/SpotifyPageBrowseNewReleases.vue","webpack:///./src/pages/SpotifyPageBrowseNewReleases.vue?6590","webpack:///./src/pages/SpotifyPageBrowseNewReleases.vue","webpack:///./src/pages/SpotifyPageBrowseFeaturedPlaylists.vue?9214","webpack:///src/pages/SpotifyPageBrowseFeaturedPlaylists.vue","webpack:///./src/pages/SpotifyPageBrowseFeaturedPlaylists.vue?6078","webpack:///./src/pages/SpotifyPageBrowseFeaturedPlaylists.vue","webpack:///./src/pages/SpotifyPageArtist.vue?04f5","webpack:///./src/components/SpotifyModalDialogArtist.vue?7e1e","webpack:///src/components/SpotifyModalDialogArtist.vue","webpack:///./src/components/SpotifyModalDialogArtist.vue?70fc","webpack:///./src/components/SpotifyModalDialogArtist.vue","webpack:///src/pages/SpotifyPageArtist.vue","webpack:///./src/pages/SpotifyPageArtist.vue?9dc4","webpack:///./src/pages/SpotifyPageArtist.vue","webpack:///./src/pages/SpotifyPageAlbum.vue?10f7","webpack:///./src/components/SpotifyListItemTrack.vue?b554","webpack:///src/components/SpotifyListItemTrack.vue","webpack:///./src/components/SpotifyListItemTrack.vue?cf85","webpack:///./src/components/SpotifyListItemTrack.vue","webpack:///./src/components/SpotifyModalDialogTrack.vue?a890","webpack:///src/components/SpotifyModalDialogTrack.vue","webpack:///./src/components/SpotifyModalDialogTrack.vue?941e","webpack:///./src/components/SpotifyModalDialogTrack.vue","webpack:///src/pages/SpotifyPageAlbum.vue","webpack:///./src/pages/SpotifyPageAlbum.vue?0210","webpack:///./src/pages/SpotifyPageAlbum.vue","webpack:///./src/pages/SpotifyPagePlaylist.vue?d7c1","webpack:///src/pages/SpotifyPagePlaylist.vue","webpack:///./src/pages/SpotifyPagePlaylist.vue?ee9d","webpack:///./src/pages/SpotifyPagePlaylist.vue","webpack:///./src/pages/SpotifyPageSearch.vue?786f","webpack:///./src/components/SpotifyListItemArtist.vue?31c1","webpack:///src/components/SpotifyListItemArtist.vue","webpack:///./src/components/SpotifyListItemArtist.vue?7153","webpack:///./src/components/SpotifyListItemArtist.vue","webpack:///src/pages/SpotifyPageSearch.vue","webpack:///./src/pages/SpotifyPageSearch.vue?51f3","webpack:///./src/pages/SpotifyPageSearch.vue","webpack:///./src/pages/SettingsPageWebinterface.vue?a3c2","webpack:///./src/components/TabsSettings.vue?16bd","webpack:///src/components/TabsSettings.vue","webpack:///./src/components/TabsSettings.vue?e8b1","webpack:///./src/components/TabsSettings.vue","webpack:///./src/components/SettingsCheckbox.vue?9de2","webpack:///src/components/SettingsCheckbox.vue","webpack:///./src/components/SettingsCheckbox.vue?d543","webpack:///./src/components/SettingsCheckbox.vue","webpack:///./src/components/SettingsTextfield.vue?cd71","webpack:///src/components/SettingsTextfield.vue","webpack:///./src/components/SettingsTextfield.vue?03aa","webpack:///./src/components/SettingsTextfield.vue","webpack:///./src/components/SettingsIntfield.vue?266e","webpack:///src/components/SettingsIntfield.vue","webpack:///./src/components/SettingsIntfield.vue?8dbe","webpack:///./src/components/SettingsIntfield.vue","webpack:///src/pages/SettingsPageWebinterface.vue","webpack:///./src/pages/SettingsPageWebinterface.vue?7d97","webpack:///./src/pages/SettingsPageWebinterface.vue","webpack:///./src/pages/SettingsPageArtwork.vue?0a8c","webpack:///src/pages/SettingsPageArtwork.vue","webpack:///./src/pages/SettingsPageArtwork.vue?f84b","webpack:///./src/pages/SettingsPageArtwork.vue","webpack:///./src/pages/SettingsPageOnlineServices.vue?fd99","webpack:///src/pages/SettingsPageOnlineServices.vue","webpack:///./src/pages/SettingsPageOnlineServices.vue?1656","webpack:///./src/pages/SettingsPageOnlineServices.vue","webpack:///./src/pages/SettingsPageRemotesOutputs.vue?a4f3","webpack:///src/pages/SettingsPageRemotesOutputs.vue","webpack:///./src/pages/SettingsPageRemotesOutputs.vue?ca6c","webpack:///./src/pages/SettingsPageRemotesOutputs.vue","webpack:///./src/router/index.js","webpack:///./src/filter/index.js","webpack:///./src/progress/index.js","webpack:///./src/main.js","webpack:///./src/components/Notifications.vue?6494","webpack:///./src/templates/ContentWithHero.vue"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","render","_vm","this","_h","$createElement","_c","_self","staticClass","staticStyle","_t","staticRenderFns","map","webpackContext","req","id","webpackContextResolve","e","Error","code","keys","resolve","attrs","directives","rawName","expression","pairing_active","on","$event","show_update_dialog","show_burger_menu","show_player_menu","style","_e","class","show_settings_menu","on_click_outside_settings","_m","_v","stopPropagation","preventDefault","is_active","full_path","open_link","UPDATE_CONFIG","UPDATE_SETTINGS","UPDATE_SETTINGS_OPTION","UPDATE_LIBRARY_STATS","UPDATE_LIBRARY_AUDIOBOOKS_COUNT","UPDATE_LIBRARY_PODCASTS_COUNT","UPDATE_LIBRARY_RSS_COUNT","UPDATE_OUTPUTS","UPDATE_PLAYER_STATUS","UPDATE_QUEUE","UPDATE_LASTFM","UPDATE_SPOTIFY","UPDATE_PAIRING","SPOTIFY_NEW_RELEASES","SPOTIFY_FEATURED_PLAYLISTS","ADD_NOTIFICATION","DELETE_NOTIFICATION","ADD_RECENT_SEARCH","HIDE_SINGLES","HIDE_SPOTIFY","ARTISTS_SORT","ARTIST_ALBUMS_SORT","ALBUMS_SORT","SHOW_ONLY_NEXT_ITEMS","SHOW_BURGER_MENU","SHOW_PLAYER_MENU","SHOW_UPDATE_DIALOG","UPDATE_DIALOG_SCAN_KIND","props","to","String","exact","Boolean","computed","$route","path","startsWith","$store","state","commit","methods","$router","resolved","href","component","components","getters","settings_option","player","config","library","audiobooks_count","podcasts_count","spotify","webapi_token_valid","watch","is_now_playing_page","_s","now_playing","title","artist","data_kind","album","toggle_mute_volume","volume","set_volume","_l","output","loading","playing","togglePlay","stream_volume","set_stream_volume","Vue","use","Vuex","Store","websocket_port","version","buildoptions","settings","categories","artists","albums","songs","db_playtime","updating","rss_count","outputs","repeat","consume","shuffle","item_id","item_length_ms","item_progress_ms","queue","count","items","lastfm","pairing","spotify_new_releases","spotify_featured_playlists","notifications","next_id","list","recent_searches","hide_singles","hide_spotify","artists_sort","artist_albums_sort","albums_sort","show_only_next_items","update_dialog_scan_kind","item","find","undefined","settings_webinterface","elem","settings_option_recently_added_limit","option","options","settings_option_show_composer_now_playing","settings_option_show_composer_for_genre","settings_category","categoryName","optionName","category","mutations","types","settingCategory","settingOption","libraryStats","playerStatus","newReleases","featuredPlaylists","notification","topic","index","findIndex","indexOf","query","pop","hideSingles","hideSpotify","sort","showOnlyNextItems","showBurgerMenu","showPlayerMenu","showUpdateDialog","scanKind","actions","add_notification","newNotification","type","text","timeout","setTimeout","axios","interceptors","response","error","request","status","responseURL","store","dispatch","statusText","Promise","reject","settings_update","put","library_stats","library_update","params","scan_kind","library_rescan","library_count","queue_clear","queue_remove","itemId","delete","queue_move","newPosition","queue_add","uri","post","then","queue_add_next","position","queue_expression_add","queue_expression_add_next","queue_save_playlist","player_status","player_play_uri","uris","clear","playback","playback_from_position","player_play_expression","player_play","player_playpos","player_playid","player_pause","player_stop","player_next","player_previous","player_shuffle","newState","player_consume","player_repeat","newRepeatMode","player_volume","player_output_volume","outputId","outputVolume","player_seek_to_pos","player_seek","seekMs","output_update","output_toggle","library_artists","media_kind","library_artist","artistId","library_artist_albums","library_albums","library_album","albumId","library_album_tracks","filter","limit","offset","library_album_track_update","attributes","library_genres","library_genre","genre","genreParams","library_genre_tracks","library_radio_streams","library_composers","library_composer","composer","library_composer_tracks","library_artist_tracks","artistParams","library_podcasts_new_episodes","episodesParams","library_podcast_episodes","library_add","url","library_playlist_delete","playlistId","library_playlists","library_playlist_folder","library_playlist","library_playlist_tracks","library_track","trackId","library_track_playlists","library_track_update","library_files","directory","filesParams","search","searchParams","spotify_login","credentials","spotify_logout","lastfm_login","lastfm_logout","pairing_kickoff","pairingReq","artwork_url_append_size_params","artworkUrl","maxwidth","maxheight","includes","_audio","Audio","_context","_source","_gain","setupAudio","AudioContext","webkitAudioContext","createMediaElementSource","createGain","connect","destination","addEventListener","play","setVolume","parseFloat","gain","playSource","source","stopAudio","resume","src","Date","now","crossOrigin","load","pause","stop","close","selected","set_enabled","type_class","play_next","webapi","newVolume","values","disabled","toggle_play_pause","icon_style","is_playing","is_pause_allowed","show_disabled_message","play_previous","is_shuffle","toggle_shuffle_mode","is_consume","toggle_consume_mode","is_repeat_off","toggle_repeat_mode","is_repeat_all","is_repeat_single","seek","is_stopped","seek_ms","NavbarItemLink","NavbarItemOutput","RangeSlider","PlayerButtonPlayPause","PlayerButtonNext","PlayerButtonPrevious","PlayerButtonShuffle","PlayerButtonConsume","PlayerButtonRepeat","PlayerButtonSeekForward","PlayerButtonSeekBack","old_volume","show_outputs_menu","show_desktop_outputs_menu","a","closeAudio","playChannel","channel","remove","$emit","kickoff_pairing","arguments","remote","pairing_req","ref","domProps","target","composing","$set","pin","show","$refs","pin_field","focus","update_library","slot","spotify_enabled","rss","tracks","$$selectedVal","Array","val","_value","multiple","isArray","rescan_metadata","_i","$$a","$$el","$$c","checked","$$v","$$i","concat","close_action","delete_action","ok_action","template","token_timer_id","reconnect_attempts","created","$Progress","start","beforeEach","from","next","meta","show_progress","progress","parseMeta","afterEach","finish","document","library_name","open_ws","vm","protocol","location","wsUrl","hostname","socket","onopen","send","JSON","stringify","update_outputs","update_player_status","update_library_stats","update_settings","update_queue","update_spotify","update_lastfm","update_pairing","onclose","onerror","onmessage","parse","notify","clearTimeout","webapi_token_expires_in","webapi_token","active","update_is_clipped","querySelector","classList","add","update_show_next_items","open_add_stream_dialog","edit_mode","queue_items","save_dialog","move_item","model","callback","current_position","open_dialog","show_details_modal","selected_item","show_url_modal","show_pls_save_modal","$slots","options_visible","scroll_to_content","scroll_to_top","observer_options","visibilityChanged","intersection","rootMargin","threshold","scrollTo","has_tabs","$scrollTo","isVisible","is_next","open_album","open_album_artist","album_artist","year","open_genre","track_number","disc_number","_f","length_ms","open_spotify_artist","open_spotify_album","samplerate","channels","bitrate","spotify_track","spotifyApi","setAccessToken","getTrack","lastIndexOf","add_stream","url_field","save","playlist_name","playlist_name_field","allow_modifying_stored_playlists","default_playlist_directory","nowPlaying","oldPosition","oldIndex","newIndex","artwork_url","artwork_url_with_size","dataURI","SVGRenderer","svg","width","height","textColor","fontFamily","fontSize","fontWeight","backgroundColor","caption","encodeURIComponent","font_family","font_size","font_weight","substring","hex","background_color","replace","parseInt","substr","g","b","luma","is_background_light","text_color","rendererParams","interval_id","setInterval","tick","catch","recently_added","open_browse","recently_played","LoadDataBeforeEnterMixin","dataObject","beforeRouteEnter","set","beforeRouteUpdate","idx","grouped","selected_album","open_remove_podcast_dialog","play_count_changed","show_remove_podcast_modal","remove_podcast","rss_playlist_to_remove","name_sort","charAt","toUpperCase","listeners","click","date_released","media_kind_resolved","mark_played","open_artist","track_count","time_added","artwork_visible","artwork_loaded","artwork_error","Albums","constructor","group","sortedAndFiltered","indexList","init","createSortedAndFilteredList","createGroupedList","createIndexList","getAlbumIndex","getRecentlyAddedBrowseIndex","recentlyAdded","diff","getTime","isAlbumVisible","Set","albumsSorted","hideOther","localeCompare","reduce","albums_list","is_grouped","rssPlaylists","pl","track","play_track","selected_track","slots","title_sort","play_count","mark_new","Math","floor","rating","comment","browseData","all","mixins","show_track_details_modal","artists_list","sort_options","char","nav","specialChars","selected_artist","album_count","Artists","getArtistIndex","isArtistVisible","artistsSorted","select","artistsData","scrollToTop","show_artist_details_modal","open_tracks","artistData","join","albumsData","index_list","show_album_details_modal","albumData","genres","total","selected_genre","genresData","show_genre_details_modal","genre_albums","genreData","tracksData","track_uris","composers_list","heading","composers","open_composer","selected_composer","open_albums","Composers","getComposerIndex","isComposerVisible","composersSorted","composersData","show_composer_details_modal","composer_albums","composerData","min_rating","show_rating","ceil","new_episodes","mark_all_played","open_track_dialog","reload_new_episodes","update_rss","open_add_podcast_dialog","reload_podcasts","forEach","ep","reload_tracks","new_tracks","playlist","playlists","open_playlist","selected_playlist","folder","playlistsData","show_playlist_details_modal","playlistData","random","current_directory","open_directory_dialog","open_parent_directory","files","open_directory","open_playlist_dialog","show_directory_details_modal","selected_directory","filesData","directories","dir","parent","streamsData","new_search","search_query","recent_search","open_recent_search","show_tracks","open_search_tracks","toLocaleString","show_artists","open_search_artists","show_albums","open_search_albums","show_composers","open_search_composers","show_playlists","open_search_playlists","show_podcasts","podcasts","open_search_podcasts","show_audiobooks","audiobooks","open_search_audiobooks","search_library","search_spotify","route_query","route","search_field","searchMusic","searchAudiobooks","searchPodcasts","trim","blur","open_album_dialog","open_artist_dialog","open_composer_dialog","mounted","updated_at","started_at","show_update_dropdown","show_update_library","filters","array","album_type","release_date","owner","display_name","images","getNewReleases","getFeaturedPlaylists","load_next","popularity","followers","append_albums","$state","getArtistAlbums","loaded","complete","is_playable","restrictions","reason","context_uri","duration_ms","getAlbum","album_id","append_tracks","getPlaylistTracks","search_tracks_next","search_artists_next","search_albums_next","search_playlists_next","search_param","validSearchTypes","reset","search_all","spotify_search","market","webapi_country","split","set_update_timer","statusUpdate","info","timerDelay","timerId","category_name","option_name","newValue","settings_checkbox","update_setting","clear_status","placeholder","settings_text","settings_number","spotify_installed","libspotify_user","libspotify_logged_in","login_libspotify","libspotify","errors","user","password","webapi_user","spotify_missing_scope","oauth_uri","spotify_required_scope","logout_spotify","enabled","logoutLastfm","scrobbling_enabled","login_lastfm","webapi_required_scope","webapi_granted_scope","scope","use_libspotify","success","kickoff_verification","verification_req","VueRouter","router","routes","PageQueue","PageAbout","PageNowPlaying","redirect","PageBrowse","PageBrowseRecentlyAdded","PageBrowseRecentlyPlayed","PageArtists","has_index","PageArtist","PageArtistTracks","PageAlbums","PageAlbum","PageGenres","PageGenre","PageGenreTracks","PageComposers","PageComposer","PageComposerTracks","PagePodcasts","PagePodcast","PageAudiobooksArtists","PageAudiobooksArtist","PageAudiobooksAlbums","PageAudiobooksAlbum","PageRadioStreams","PageFiles","PagePlaylists","PagePlaylist","PageSearch","SpotifyPageBrowse","SpotifyPageBrowseNewReleases","SpotifyPageBrowseFeaturedPlaylists","SpotifyPageArtist","SpotifyPageAlbum","SpotifyPagePlaylist","SpotifyPageSearch","SettingsPageWebinterface","SettingsPageArtwork","SettingsPageOnlineServices","SettingsPageRemotesOutputs","scrollBehavior","savedPosition","hash","selector","x","y","momentDurationFormatSetup","moment","format","duration","withoutSuffix","fromNow","VueProgressBar","color","failedColor","productionTip","vClickOutside","VueTinyLazyloadImg","VueObserveVisibility","VueScrollTo","el","App"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAG/Be,GAAqBA,EAAoBhB,GAE5C,MAAMO,EAASC,OACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAKnBhB,EAAkB,CACrB,IAAO,GAGJK,EAAkB,GAGtB,SAASS,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU6B,QAGnC,IAAIC,EAASF,EAAiB5B,GAAY,CACzCK,EAAGL,EACH+B,GAAG,EACHF,QAAS,IAUV,OANAf,EAAQd,GAAUW,KAAKmB,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAG/DI,EAAOC,GAAI,EAGJD,EAAOD,QAKfH,EAAoBM,EAAIlB,EAGxBY,EAAoBO,EAAIL,EAGxBF,EAAoBQ,EAAI,SAASL,EAASM,EAAMC,GAC3CV,EAAoBW,EAAER,EAASM,IAClC3B,OAAO8B,eAAeT,EAASM,EAAM,CAAEI,YAAY,EAAMC,IAAKJ,KAKhEV,EAAoBe,EAAI,SAASZ,GACX,qBAAXa,QAA0BA,OAAOC,aAC1CnC,OAAO8B,eAAeT,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DpC,OAAO8B,eAAeT,EAAS,aAAc,CAAEe,OAAO,KAQvDlB,EAAoBmB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQlB,EAAoBkB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKxC,OAAOyC,OAAO,MAGvB,GAFAvB,EAAoBe,EAAEO,GACtBxC,OAAO8B,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOlB,EAAoBQ,EAAEc,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRtB,EAAoB0B,EAAI,SAAStB,GAChC,IAAIM,EAASN,GAAUA,EAAOiB,WAC7B,WAAwB,OAAOjB,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAJ,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRV,EAAoBW,EAAI,SAASgB,EAAQC,GAAY,OAAO9C,OAAOC,UAAUC,eAAeC,KAAK0C,EAAQC,IAGzG5B,EAAoB6B,EAAI,GAExB,IAAIC,EAAaC,OAAO,gBAAkBA,OAAO,iBAAmB,GAChEC,EAAmBF,EAAW3C,KAAKsC,KAAKK,GAC5CA,EAAW3C,KAAOf,EAClB0D,EAAaA,EAAWG,QACxB,IAAI,IAAItD,EAAI,EAAGA,EAAImD,EAAWjD,OAAQF,IAAKP,EAAqB0D,EAAWnD,IAC3E,IAAIU,EAAsB2C,EAI1BzC,EAAgBJ,KAAK,CAAC,EAAE,kBAEjBM,K,iJCvJT,IAAIyC,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,UAAU,CAACE,YAAY,oCAAoC,CAACF,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,MAAM,CAACE,YAAY,UAAUC,YAAY,CAAC,iBAAiB,gBAAgB,CAACH,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACN,EAAIQ,GAAG,kBAAkB,GAAGJ,EAAG,MAAM,CAACE,YAAY,kDAAkDC,YAAY,CAAC,OAAS,WAAW,CAACP,EAAIQ,GAAG,iBAAiB,eAAeJ,EAAG,UAAU,CAACE,YAAY,sBAAsB,CAACF,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACN,EAAIQ,GAAG,WAAWJ,EAAG,MAAM,CAACG,YAAY,CAAC,aAAa,SAAS,CAACP,EAAIQ,GAAG,WAAW,IAAI,YAC93BC,EAAkB,I,kCCDtB,yBAAyV,eAAG,G,qBCA5V,IAAIC,EAAM,CACT,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,QAAS,OACT,WAAY,OACZ,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,gBAAiB,OACjB,aAAc,OACd,gBAAiB,OACjB,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,UAAW,OACX,aAAc,OACd,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,WAAY,OACZ,cAAe,OACf,UAAW,OACX,aAAc,OACd,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,YAAa,OACb,eAAgB,OAChB,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,QAAS,OACT,WAAY,OACZ,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,UAAW,OACX,aAAc,OACd,QAAS,OACT,WAAY,OACZ,OAAQ,OACR,UAAW,OACX,QAAS,OACT,WAAY,OACZ,QAAS,OACT,aAAc,OACd,gBAAiB,OACjB,WAAY,OACZ,UAAW,OACX,aAAc,OACd,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,YAAa,OACb,eAAgB,OAChB,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,gBAAiB,OACjB,OAAQ,OACR,UAAW,OACX,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,QAIf,SAASC,EAAeC,GACvB,IAAIC,EAAKC,EAAsBF,GAC/B,OAAO/C,EAAoBgD,GAE5B,SAASC,EAAsBF,GAC9B,IAAI/C,EAAoBW,EAAEkC,EAAKE,GAAM,CACpC,IAAIG,EAAI,IAAIC,MAAM,uBAAyBJ,EAAM,KAEjD,MADAG,EAAEE,KAAO,mBACHF,EAEP,OAAOL,EAAIE,GAEZD,EAAeO,KAAO,WACrB,OAAOvE,OAAOuE,KAAKR,IAEpBC,EAAeQ,QAAUL,EACzB7C,EAAOD,QAAU2C,EACjBA,EAAeE,GAAK,Q,kHCnShBd,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACgB,MAAM,CAAC,GAAK,QAAQ,CAAChB,EAAG,cAAcA,EAAG,mBAAmB,CAACE,YAAY,oBAAoBF,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAChB,EAAG,cAAc,CAACiB,WAAW,CAAC,CAAC/C,KAAK,OAAOgD,QAAQ,SAASvC,OAAM,EAAOwC,WAAW,YAAY,GAAGnB,EAAG,8BAA8B,CAACgB,MAAM,CAAC,KAAOpB,EAAIwB,gBAAgBC,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIwB,gBAAiB,MAAUpB,EAAG,sBAAsB,CAACgB,MAAM,CAAC,KAAOpB,EAAI2B,oBAAoBF,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI2B,oBAAqB,MAAUvB,EAAG,gBAAgB,CAACiB,WAAW,CAAC,CAAC/C,KAAK,OAAOgD,QAAQ,SAASvC,OAAQiB,EAAI4B,iBAAkBL,WAAW,wBAAwBnB,EAAG,iBAAiBA,EAAG,MAAM,CAACiB,WAAW,CAAC,CAAC/C,KAAK,OAAOgD,QAAQ,SAASvC,MAAOiB,EAAI4B,kBAAoB5B,EAAI6B,iBAAkBN,WAAW,yCAAyCjB,YAAY,wBAAwBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI4B,iBAAmB5B,EAAI6B,kBAAmB,OAAW,IACz/BpB,EAAkB,GCDlB,G,UAAS,WAAa,IAAIT,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,6CAA6CwB,MAAO9B,EAAU,OAAEoB,MAAM,CAAC,KAAO,aAAa,aAAa,oBAAoB,CAAChB,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAAEN,EAAwB,qBAAEI,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,eAAe,CAAChB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,8BAA8BN,EAAI+B,KAAM/B,EAAoB,iBAAEI,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,WAAW,CAAChB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBN,EAAI+B,KAAM/B,EAAuB,oBAAEI,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,cAAc,CAAChB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,2BAA2BN,EAAI+B,KAAM/B,EAAyB,sBAAEI,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,gBAAgB,CAAChB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,kCAAkCN,EAAI+B,KAAM/B,EAAoB,iBAAEI,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,WAAW,CAAChB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBN,EAAI+B,KAAM/B,EAAoB,iBAAEI,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,WAAW,CAAChB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAI+B,KAAM/B,EAAqB,kBAAEI,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,YAAY,CAAChB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,wBAAwBN,EAAI+B,KAAK3B,EAAG,MAAM,CAACE,YAAY,gBAAgB0B,MAAM,CAAE,YAAahC,EAAI4B,kBAAmBH,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI4B,kBAAoB5B,EAAI4B,oBAAoB,CAACxB,EAAG,QAAQA,EAAG,QAAQA,EAAG,WAAW,GAAGA,EAAG,MAAM,CAACE,YAAY,cAAc0B,MAAM,CAAE,YAAahC,EAAI4B,mBAAoB,CAACxB,EAAG,MAAM,CAACE,YAAY,iBAAiBF,EAAG,MAAM,CAACE,YAAY,cAAc,CAACF,EAAG,MAAM,CAACE,YAAY,wCAAwC0B,MAAM,CAAE,YAAahC,EAAIiC,oBAAqBR,GAAG,CAAC,MAAQzB,EAAIkC,4BAA4B,CAAClC,EAAImC,GAAG,GAAG/B,EAAG,MAAM,CAACE,YAAY,4BAA4B,CAACF,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,eAAe,CAAChB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,IAAI,CAACJ,EAAIoC,GAAG,iBAAiBhC,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,SAAS,MAAQ,KAAK,CAAChB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,oBAAoBN,EAAIoC,GAAG,KAAKhC,EAAG,IAAI,CAACJ,EAAIoC,GAAG,aAAahC,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,mBAAmB,CAAChB,EAAG,OAAO,CAACE,YAAY,yBAAyB,CAACN,EAAIoC,GAAG,eAAehC,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,kBAAkB,CAAChB,EAAG,OAAO,CAACE,YAAY,yBAAyB,CAACN,EAAIoC,GAAG,cAAchC,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,kBAAkB,CAAChB,EAAG,OAAO,CAACE,YAAY,yBAAyB,CAACN,EAAIoC,GAAG,cAAepC,EAAmB,gBAAEI,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,mBAAmB,CAAChB,EAAG,OAAO,CAACE,YAAY,yBAAyB,CAACN,EAAIoC,GAAG,eAAepC,EAAI+B,KAAK3B,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,cAAc,CAAChB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,yBAAyBN,EAAIoC,GAAG,KAAKhC,EAAG,IAAI,CAACJ,EAAIoC,GAAG,gBAAgBhC,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,gBAAgB,CAAChB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,gCAAgCN,EAAIoC,GAAG,KAAKhC,EAAG,IAAI,CAACJ,EAAIoC,GAAG,kBAAkBhC,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,WAAW,CAAChB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,oBAAoBN,EAAIoC,GAAG,KAAKhC,EAAG,IAAI,CAACJ,EAAIoC,GAAG,aAAahC,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,WAAW,CAAChB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,0BAA0BN,EAAIoC,GAAG,KAAKhC,EAAG,IAAI,CAACJ,EAAIoC,GAAG,aAAahC,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,YAAY,CAAChB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBN,EAAIoC,GAAG,KAAKhC,EAAG,IAAI,CAACJ,EAAIoC,GAAG,cAAchC,EAAG,KAAK,CAACE,YAAY,sBAAsBF,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,2BAA2B,CAACpB,EAAIoC,GAAG,cAAchC,EAAG,IAAI,CAACE,YAAY,cAAcmB,GAAG,CAAC,MAAQ,SAASC,GAAQA,EAAOW,kBAAkBX,EAAOY,iBAAiBtC,EAAI2B,oBAAqB,EAAM3B,EAAIiC,oBAAqB,EAAOjC,EAAI4B,kBAAmB,KAAS,CAAC5B,EAAIoC,GAAG,sBAAsBhC,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,WAAW,CAACpB,EAAIoC,GAAG,WAAWhC,EAAG,MAAM,CAACE,YAAY,gCAAgCC,YAAY,CAAC,gBAAgB,aAAa,SAASH,EAAG,MAAM,CAACiB,WAAW,CAAC,CAAC/C,KAAK,OAAOgD,QAAQ,SAASvC,MAAOiB,EAAsB,mBAAEuB,WAAW,uBAAuBjB,YAAY,aAAaC,YAAY,CAAC,UAAU,KAAK,MAAQ,QAAQ,OAAS,SAASkB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIiC,oBAAqB,UACr4I,EAAkB,CAAC,WAAa,IAAIjC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,IAAI,CAACE,YAAY,4BAA4B,CAACF,EAAG,OAAO,CAACE,YAAY,wBAAwB,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BF,EAAG,OAAO,CAACE,YAAY,0CAA0C,CAACN,EAAIoC,GAAG,iBCDhU,EAAS,WAAa,IAAIpC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,IAAI,CAACE,YAAY,cAAc0B,MAAM,CAAE,YAAahC,EAAIuC,WAAYnB,MAAM,CAAC,KAAOpB,EAAIwC,aAAaf,GAAG,CAAC,MAAQ,SAASC,GAAyD,OAAjDA,EAAOW,kBAAkBX,EAAOY,iBAAwBtC,EAAIyC,eAAe,CAACzC,EAAIQ,GAAG,YAAY,IAC9T,EAAkB,GCDf,MAAMkC,EAAgB,gBAChBC,EAAkB,kBAClBC,EAAyB,yBACzBC,EAAuB,uBACvBC,EAAkC,kCAClCC,EAAgC,gCAChCC,EAA2B,2BAC3BC,EAAiB,iBACjBC,EAAuB,uBACvBC,EAAe,eACfC,EAAgB,gBAChBC,EAAiB,iBACjBC,EAAiB,iBAEjBC,EAAuB,uBACvBC,EAA6B,6BAE7BC,EAAmB,mBACnBC,EAAsB,sBACtBC,EAAoB,oBAEpBC,EAAe,eACfC,EAAe,eACfC,EAAe,eACfC,EAAqB,qBACrBC,EAAc,cACdC,EAAuB,uBACvBC,EAAmB,mBACnBC,EAAmB,mBACnBC,EAAqB,qBACrBC,EAA0B,0BCrBvC,OACE/F,KAAM,iBACNgG,MAAO,CACLC,GAAIC,OACJC,MAAOC,SAGTC,SAAU,CACR,YACE,OAAI1E,KAAKwE,MACAxE,KAAK2E,OAAOC,OAAS5E,KAAKsE,GAE5BtE,KAAK2E,OAAOC,KAAKC,WAAW7E,KAAKsE,KAG1C1C,iBAAkB,CAChB,MACE,OAAO5B,KAAK8E,OAAOC,MAAMnD,kBAE3B,IAAN,GACQ5B,KAAK8E,OAAOE,OAAO,EAA3B,KAIIrD,iBAAkB,CAChB,MACE,OAAO3B,KAAK8E,OAAOC,MAAMpD,kBAE3B,IAAN,GACQ3B,KAAK8E,OAAOE,OAAO,EAA3B,MAKEC,QAAS,CACPzC,UAAW,WACLxC,KAAK2B,kBACP3B,KAAK8E,OAAOE,OAAO,GAA3B,GAEUhF,KAAK4B,kBACP5B,KAAK8E,OAAOE,OAAO,GAA3B,GAEMhF,KAAKkF,QAAQnI,KAAK,CAAxB,gBAGIwF,UAAW,WACT,MAAM4C,EAAWnF,KAAKkF,QAAQhE,QAAQlB,KAAKsE,IAC3C,OAAOa,EAASC,QCxDkU,I,YCOpVC,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,EAAAA,E,QCkEf,GACEhH,KAAM,YACNiH,WAAY,CAAd,kBAEE,OACE,MAAO,CACLtD,oBAAoB,IAIxB0C,SAAU,CACR,uBACE,OAAO1E,KAAK8E,OAAOS,QAAQC,gBAAgB,eAAgB,4BAA4B1G,OAEzF,mBACE,OAAOkB,KAAK8E,OAAOS,QAAQC,gBAAgB,eAAgB,wBAAwB1G,OAErF,sBACE,OAAOkB,KAAK8E,OAAOS,QAAQC,gBAAgB,eAAgB,2BAA2B1G,OAExF,wBACE,OAAOkB,KAAK8E,OAAOS,QAAQC,gBAAgB,eAAgB,6BAA6B1G,OAE1F,mBACE,OAAOkB,KAAK8E,OAAOS,QAAQC,gBAAgB,eAAgB,wBAAwB1G,OAErF,mBACE,OAAOkB,KAAK8E,OAAOS,QAAQC,gBAAgB,eAAgB,wBAAwB1G,OAErF,oBACE,OAAOkB,KAAK8E,OAAOS,QAAQC,gBAAgB,eAAgB,yBAAyB1G,OAGtF,SACE,OAAOkB,KAAK8E,OAAOC,MAAMU,QAG3B,SACE,OAAOzF,KAAK8E,OAAOC,MAAMW,QAG3B,UACE,OAAO1F,KAAK8E,OAAOC,MAAMY,SAG3B,aACE,OAAO3F,KAAK8E,OAAOC,MAAMa,kBAG3B,WACE,OAAO5F,KAAK8E,OAAOC,MAAMc,gBAG3B,kBACE,OAAO7F,KAAK8E,OAAOC,MAAMe,QAAQC,oBAGnCpE,iBAAkB,CAChB,MACE,OAAO3B,KAAK8E,OAAOC,MAAMpD,kBAE3B,IAAN,GACQ3B,KAAK8E,OAAOE,OAAO,EAA3B,KAII,mBACE,OAAOhF,KAAK8E,OAAOC,MAAMnD,kBAG3BF,mBAAoB,CAClB,MACE,OAAO1B,KAAK8E,OAAOC,MAAMrD,oBAE3B,IAAN,GACQ1B,KAAK8E,OAAOE,OAAO,EAA3B,KAII,SACE,OAAIhF,KAAK4B,iBACA,cAEF,KAIXqD,QAAS,CACP,4BACEjF,KAAKgC,oBAAsBhC,KAAKgC,qBAIpCgE,MAAO,CACL,OAAJ,KACMhG,KAAKgC,oBAAqB,KCnLmT,ICO/U,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,I,QClBX,EAAS,WAAa,IAAIjC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,mDAAmD0B,MAAM,CAAE,iBAAkBhC,EAAIkG,oBAAqB,WAAYlG,EAAIkG,qBAAsBpE,MAAO9B,EAAU,OAAEoB,MAAM,CAAC,KAAO,aAAa,aAAa,oBAAoB,CAAChB,EAAG,MAAM,CAACE,YAAY,4BAA4B,CAACF,EAAG,mBAAmB,CAACgB,MAAM,CAAC,GAAK,IAAI,MAAQ,KAAK,CAAChB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,uCAAyCN,EAAIkG,oBAA6clG,EAAI+B,KAA5b3B,EAAG,cAAc,CAACE,YAAY,qCAAqCc,MAAM,CAAC,GAAK,eAAe,eAAe,YAAY,MAAQ,KAAK,CAAChB,EAAG,MAAM,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,gCAAgC,CAACF,EAAG,SAAS,CAACJ,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIoG,YAAYC,UAAUjG,EAAG,MAAMJ,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAIoG,YAAYE,SAAwC,QAA9BtG,EAAIoG,YAAYG,UAAqBnG,EAAG,OAAO,CAACJ,EAAIoC,GAAG,MAAMpC,EAAImG,GAAGnG,EAAIoG,YAAYI,UAAUxG,EAAI+B,WAAqB/B,EAAuB,oBAAEI,EAAG,yBAAyB,CAACE,YAAY,kCAAkCc,MAAM,CAAC,WAAa,cAAcpB,EAAI+B,KAAM/B,EAAuB,oBAAEI,EAAG,0BAA0B,CAACE,YAAY,cAAcc,MAAM,CAAC,QAAU,QAAQ,WAAa,cAAcpB,EAAI+B,KAAK3B,EAAG,2BAA2B,CAACE,YAAY,cAAcc,MAAM,CAAC,WAAa,WAAW,sBAAwB,MAAOpB,EAAuB,oBAAEI,EAAG,6BAA6B,CAACE,YAAY,cAAcc,MAAM,CAAC,QAAU,QAAQ,WAAa,cAAcpB,EAAI+B,KAAM/B,EAAuB,oBAAEI,EAAG,qBAAqB,CAACE,YAAY,cAAcc,MAAM,CAAC,WAAa,cAAcpB,EAAI+B,KAAK3B,EAAG,IAAI,CAACE,YAAY,oDAAoDmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI6B,kBAAoB7B,EAAI6B,oBAAoB,CAACzB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,eAAe0B,MAAM,CAAE,kBAAmBhC,EAAI6B,iBAAkB,mBAAoB7B,EAAI6B,wBAAyBzB,EAAG,MAAM,CAACE,YAAY,+EAA+E0B,MAAM,CAAE,YAAahC,EAAI6B,mBAAoB,CAACzB,EAAG,IAAI,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI6B,kBAAoB7B,EAAI6B,oBAAoB,CAACzB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,eAAe0B,MAAM,CAAE,kBAAmBhC,EAAI6B,iBAAkB,mBAAoB7B,EAAI6B,wBAAyBzB,EAAG,MAAM,CAACE,YAAY,oCAAoCC,YAAY,CAAC,eAAe,MAAM,gBAAgB,MAAM,gBAAgB,QAAQ,CAACH,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,MAAM,CAACE,YAAY,aAAaC,YAAY,CAAC,YAAY,MAAM,CAACH,EAAG,IAAI,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAIyG,qBAAqB,CAACrG,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,eAAe0B,MAAM,CAAE,iBAAkBhC,EAAI0F,OAAOgB,QAAU,EAAG,kBAAmB1G,EAAI0F,OAAOgB,OAAS,WAAYtG,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,YAAYhC,EAAG,eAAe,CAACE,YAAY,uBAAuBc,MAAM,CAAC,IAAM,IAAI,IAAM,MAAM,KAAO,IAAI,MAAQpB,EAAI0F,OAAOgB,QAAQjF,GAAG,CAAC,OAASzB,EAAI2G,eAAe,WAAWvG,EAAG,KAAK,CAACE,YAAY,sBAAsBN,EAAI4G,GAAI5G,EAAW,SAAE,SAAS6G,GAAQ,OAAOzG,EAAG,qBAAqB,CAACf,IAAIwH,EAAOhG,GAAGO,MAAM,CAAC,OAASyF,QAAYzG,EAAG,KAAK,CAACE,YAAY,sBAAsBF,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,MAAM,CAACE,YAAY,aAAaC,YAAY,CAAC,YAAY,MAAM,CAACH,EAAG,IAAI,CAACE,YAAY,2BAA2B0B,MAAM,CAAE,aAAchC,EAAI8G,UAAW,CAAC1G,EAAG,OAAO,CAACE,YAAY,qBAAqB0B,MAAM,CAAE,uBAAwBhC,EAAI+G,UAAY/G,EAAI8G,QAAS,aAAc9G,EAAI8G,SAAUrF,GAAG,CAAC,MAAQzB,EAAIgH,aAAa,CAAC5G,EAAG,IAAI,CAACE,YAAY,uCAAuCF,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,UAAU0B,MAAM,CAAE,uBAAwBhC,EAAI+G,UAAW,CAAC/G,EAAIoC,GAAG,gBAAgBpC,EAAImC,GAAG,KAAK/B,EAAG,eAAe,CAACE,YAAY,uBAAuBc,MAAM,CAAC,IAAM,IAAI,IAAM,MAAM,KAAO,IAAI,UAAYpB,EAAI+G,QAAQ,MAAQ/G,EAAIiH,eAAexF,GAAG,CAAC,OAASzB,EAAIkH,sBAAsB,WAAW9G,EAAG,KAAK,CAACE,YAAY,sBAAsBF,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,cAAc,CAACF,EAAG,MAAM,CAACE,YAAY,sBAAsB,CAACF,EAAG,uBAAuB,CAACE,YAAY,WAAWF,EAAG,wBAAwB,CAACE,YAAY,WAAWF,EAAG,wBAAwB,CAACE,YAAY,YAAY,UAAU,MAAM,GAAGF,EAAG,MAAM,CAACE,YAAY,gCAAgC0B,MAAM,CAAE,YAAahC,EAAI6B,mBAAoB,CAACzB,EAAG,MAAM,CAACE,YAAY,iBAAiBF,EAAG,MAAM,CAACE,YAAY,cAAc,CAACF,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,uBAAuB,CAACE,YAAY,SAASc,MAAM,CAAC,WAAa,cAAchB,EAAG,wBAAwB,CAACE,YAAY,SAASc,MAAM,CAAC,WAAa,cAAchB,EAAG,wBAAwB,CAACE,YAAY,SAASc,MAAM,CAAC,WAAa,eAAe,KAAKhB,EAAG,KAAK,CAACE,YAAY,sBAAsBF,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,MAAM,CAACE,YAAY,aAAaC,YAAY,CAAC,YAAY,MAAM,CAACH,EAAG,IAAI,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAIyG,qBAAqB,CAACrG,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,eAAe0B,MAAM,CAAE,iBAAkBhC,EAAI0F,OAAOgB,QAAU,EAAG,kBAAmB1G,EAAI0F,OAAOgB,OAAS,WAAYtG,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,YAAYhC,EAAG,eAAe,CAACE,YAAY,uBAAuBc,MAAM,CAAC,IAAM,IAAI,IAAM,MAAM,KAAO,IAAI,MAAQpB,EAAI0F,OAAOgB,QAAQjF,GAAG,CAAC,OAASzB,EAAI2G,eAAe,WAAW3G,EAAI4G,GAAI5G,EAAW,SAAE,SAAS6G,GAAQ,OAAOzG,EAAG,qBAAqB,CAACf,IAAIwH,EAAOhG,GAAGO,MAAM,CAAC,OAASyF,QAAYzG,EAAG,KAAK,CAACE,YAAY,sBAAsBF,EAAG,MAAM,CAACE,YAAY,oCAAoC,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,MAAM,CAACE,YAAY,aAAaC,YAAY,CAAC,YAAY,MAAM,CAACH,EAAG,IAAI,CAACE,YAAY,2BAA2B0B,MAAM,CAAE,aAAchC,EAAI8G,UAAW,CAAC1G,EAAG,OAAO,CAACE,YAAY,qBAAqB0B,MAAM,CAAE,uBAAwBhC,EAAI+G,UAAY/G,EAAI8G,QAAS,aAAc9G,EAAI8G,SAAUrF,GAAG,CAAC,MAAQzB,EAAIgH,aAAa,CAAC5G,EAAG,IAAI,CAACE,YAAY,uCAAuCF,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,UAAU0B,MAAM,CAAE,uBAAwBhC,EAAI+G,UAAW,CAAC/G,EAAIoC,GAAG,gBAAgBpC,EAAImC,GAAG,KAAK/B,EAAG,eAAe,CAACE,YAAY,uBAAuBc,MAAM,CAAC,IAAM,IAAI,IAAM,MAAM,KAAO,IAAI,UAAYpB,EAAI+G,QAAQ,MAAQ/G,EAAIiH,eAAexF,GAAG,CAAC,OAASzB,EAAIkH,sBAAsB,YAAY,QAClhO,EAAkB,CAAC,WAAa,IAAIlH,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,IAAI,CAACgB,MAAM,CAAC,KAAO,eAAe,CAAChB,EAAG,OAAO,CAACE,YAAY,gBAAgB,CAACN,EAAIoC,GAAG,qBAAqB,WAAa,IAAIpC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,IAAI,CAACgB,MAAM,CAAC,KAAO,eAAe,CAAChB,EAAG,OAAO,CAACE,YAAY,gBAAgB,CAACN,EAAIoC,GAAG,sB,iCCG5X+E,OAAIC,IAAIC,QAEO,UAAIA,OAAKC,MAAM,CAC5BtC,MAAO,CACLW,OAAQ,CACN4B,eAAgB,EAChBC,QAAS,GACTC,aAAc,IAEhBC,SAAU,CACRC,WAAY,IAEd/B,QAAS,CACPgC,QAAS,EACTC,OAAQ,EACRC,MAAO,EACPC,YAAa,EACbC,UAAU,GAEZnC,iBAAkB,GAClBC,eAAgB,GAChBmC,UAAW,GACXC,QAAS,GACTxC,OAAQ,CACNV,MAAO,OACPmD,OAAQ,MACRC,SAAS,EACTC,SAAS,EACT3B,OAAQ,EACR4B,QAAS,EACTC,eAAgB,EAChBC,iBAAkB,GAEpBC,MAAO,CACLjB,QAAS,EACTkB,MAAO,EACPC,MAAO,IAETC,OAAQ,GACR7C,QAAS,GACT8C,QAAS,GAETC,qBAAsB,GACtBC,2BAA4B,GAE5BC,cAAe,CACbC,QAAS,EACTC,KAAM,IAERC,gBAAiB,GAEjBC,cAAc,EACdC,cAAc,EACdC,aAAc,OACdC,mBAAoB,OACpBC,YAAa,OACbC,sBAAsB,EACtB7H,kBAAkB,EAClBC,kBAAkB,EAClBF,oBAAoB,EACpB+H,wBAAyB,IAG3BlE,QAAS,CACPY,YAAapB,IACX,MAAM2E,EAAO3E,EAAMyD,MAAME,MAAMiB,MAAK,SAAUD,GAC5C,OAAOA,EAAK9I,KAAOmE,EAAMU,OAAO4C,WAElC,YAAiBuB,IAATF,EAAsB,GAAKA,GAGrCG,sBAAuB9E,GACjBA,EAAM0C,SACD1C,EAAM0C,SAASC,WAAWiC,KAAKG,GAAsB,iBAAdA,EAAKzL,MAE9C,KAGT0L,qCAAsC,CAAChF,EAAOQ,KAC5C,GAAIA,EAAQsE,sBAAuB,CACjC,MAAMG,EAASzE,EAAQsE,sBAAsBI,QAAQN,KAAKG,GAAsB,yBAAdA,EAAKzL,MACvE,GAAI2L,EACF,OAAOA,EAAOlL,MAGlB,OAAO,KAGToL,0CAA2C,CAACnF,EAAOQ,KACjD,GAAIA,EAAQsE,sBAAuB,CACjC,MAAMG,EAASzE,EAAQsE,sBAAsBI,QAAQN,KAAKG,GAAsB,8BAAdA,EAAKzL,MACvE,GAAI2L,EACF,OAAOA,EAAOlL,MAGlB,OAAO,GAGTqL,wCAAyC,CAACpF,EAAOQ,KAC/C,GAAIA,EAAQsE,sBAAuB,CACjC,MAAMG,EAASzE,EAAQsE,sBAAsBI,QAAQN,KAAKG,GAAsB,4BAAdA,EAAKzL,MACvE,GAAI2L,EACF,OAAOA,EAAOlL,MAGlB,OAAO,MAGTsL,kBAAoBrF,GAAWsF,GACtBtF,EAAM0C,SAASC,WAAWiC,KAAKG,GAAQA,EAAKzL,OAASgM,GAG9D7E,gBAAkBT,GAAU,CAACsF,EAAcC,KACzC,MAAMC,EAAWxF,EAAM0C,SAASC,WAAWiC,KAAKG,GAAQA,EAAKzL,OAASgM,GACtE,OAAKE,EAGEA,EAASN,QAAQN,KAAKG,GAAQA,EAAKzL,OAASiM,GAF1C,KAMbE,UAAW,CACT,CAACC,GAAsB1F,EAAOW,GAC5BX,EAAMW,OAASA,GAEjB,CAAC+E,GAAwB1F,EAAO0C,GAC9B1C,EAAM0C,SAAWA,GAEnB,CAACgD,GAA+B1F,EAAOiF,GACrC,MAAMU,EAAkB3F,EAAM0C,SAASC,WAAWiC,KAAKG,GAAQA,EAAKzL,OAAS2L,EAAOO,UAC9EI,EAAgBD,EAAgBT,QAAQN,KAAKG,GAAQA,EAAKzL,OAAS2L,EAAO3L,MAChFsM,EAAc7L,MAAQkL,EAAOlL,OAE/B,CAAC2L,GAA6B1F,EAAO6F,GACnC7F,EAAMY,QAAUiF,GAElB,CAACH,GAAwC1F,EAAO0D,GAC9C1D,EAAMa,iBAAmB6C,GAE3B,CAACgC,GAAsC1F,EAAO0D,GAC5C1D,EAAMc,eAAiB4C,GAEzB,CAACgC,GAAiC1F,EAAO0D,GACvC1D,EAAMiD,UAAYS,GAEpB,CAACgC,GAAuB1F,EAAOkD,GAC7BlD,EAAMkD,QAAUA,GAElB,CAACwC,GAA6B1F,EAAO8F,GACnC9F,EAAMU,OAASoF,GAEjB,CAACJ,GAAqB1F,EAAOyD,GAC3BzD,EAAMyD,MAAQA,GAEhB,CAACiC,GAAsB1F,EAAO4D,GAC5B5D,EAAM4D,OAASA,GAEjB,CAAC8B,GAAuB1F,EAAOe,GAC7Bf,EAAMe,QAAUA,GAElB,CAAC2E,GAAuB1F,EAAO6D,GAC7B7D,EAAM6D,QAAUA,GAElB,CAAC6B,GAA6B1F,EAAO+F,GACnC/F,EAAM8D,qBAAuBiC,GAE/B,CAACL,GAAmC1F,EAAOgG,GACzChG,EAAM+D,2BAA6BiC,GAErC,CAACN,GAAyB1F,EAAOiG,GAC/B,GAAIA,EAAaC,MAAO,CACtB,MAAMC,EAAQnG,EAAMgE,cAAcE,KAAKkC,UAAUrB,GAAQA,EAAKmB,QAAUD,EAAaC,OACrF,GAAIC,GAAS,EAEX,YADAnG,EAAMgE,cAAcE,KAAKtL,OAAOuN,EAAO,EAAGF,GAI9CjG,EAAMgE,cAAcE,KAAKlM,KAAKiO,IAEhC,CAACP,GAA4B1F,EAAOiG,GAClC,MAAME,EAAQnG,EAAMgE,cAAcE,KAAKmC,QAAQJ,IAEhC,IAAXE,GACFnG,EAAMgE,cAAcE,KAAKtL,OAAOuN,EAAO,IAG3C,CAACT,GAA0B1F,EAAOsG,GAChC,MAAMH,EAAQnG,EAAMmE,gBAAgBiC,UAAUrB,GAAQA,IAASuB,GAC3DH,GAAS,GACXnG,EAAMmE,gBAAgBvL,OAAOuN,EAAO,GAGtCnG,EAAMmE,gBAAgBvL,OAAO,EAAG,EAAG0N,GAE/BtG,EAAMmE,gBAAgBzM,OAAS,GACjCsI,EAAMmE,gBAAgBoC,OAG1B,CAACb,GAAqB1F,EAAOwG,GAC3BxG,EAAMoE,aAAeoC,GAEvB,CAACd,GAAqB1F,EAAOyG,GAC3BzG,EAAMqE,aAAeoC,GAEvB,CAACf,GAAqB1F,EAAO0G,GAC3B1G,EAAMsE,aAAeoC,GAEvB,CAAChB,GAA2B1F,EAAO0G,GACjC1G,EAAMuE,mBAAqBmC,GAE7B,CAAChB,GAAoB1F,EAAO0G,GAC1B1G,EAAMwE,YAAckC,GAEtB,CAAChB,GAA6B1F,EAAO2G,GACnC3G,EAAMyE,qBAAuBkC,GAE/B,CAACjB,GAAyB1F,EAAO4G,GAC/B5G,EAAMpD,iBAAmBgK,GAE3B,CAAClB,GAAyB1F,EAAO6G,GAC/B7G,EAAMnD,iBAAmBgK,GAE3B,CAACnB,GAA2B1F,EAAO8G,GACjC9G,EAAMrD,mBAAqBmK,GAE7B,CAACpB,GAAgC1F,EAAO+G,GACtC/G,EAAM0E,wBAA0BqC,IAIpCC,QAAS,CACPC,kBAAkB,OAAEhH,EAAF,MAAUD,GAASiG,GACnC,MAAMiB,EAAkB,CACtBrL,GAAImE,EAAMgE,cAAcC,UACxBkD,KAAMlB,EAAakB,KACnBC,KAAMnB,EAAamB,KACnBlB,MAAOD,EAAaC,MACpBmB,QAASpB,EAAaoB,SAGxBpH,EAAOyF,EAAwBwB,GAE3BjB,EAAaoB,QAAU,GACzBC,WAAW,KACTrH,EAAOyF,EAA2BwB,IACjCjB,EAAaoB,aCtPxBE,IAAMC,aAAaC,SAASrF,KAAI,SAAUqF,GACxC,OAAOA,KACN,SAAUC,GAIX,OAHIA,EAAMC,QAAQC,QAAUF,EAAMC,QAAQE,aACxCC,EAAMC,SAAS,mBAAoB,CAAEX,KAAM,2BAA6BM,EAAMC,QAAQC,OAAS,IAAMF,EAAMC,QAAQK,WAAa,UAAYN,EAAMC,QAAQE,YAAc,IAAKV,KAAM,WAE9Kc,QAAQC,OAAOR,MAGT,OACb/G,SACE,OAAO4G,IAAM5N,IAAI,iBAGnB+I,WACE,OAAO6E,IAAM5N,IAAI,mBAGnBwO,gBAAiB7C,EAAcL,GAC7B,OAAOsC,IAAMa,IAAI,kBAAoB9C,EAAe,IAAML,EAAO3L,KAAM2L,IAGzEoD,gBACE,OAAOd,IAAM5N,IAAI,kBAGnB2O,eAAgBvB,GACd,MAAMwB,EAAS,GAIf,OAHIxB,IACFwB,EAAOC,UAAYzB,GAEdQ,IAAMa,IAAI,oBAAgBvD,EAAW,CAAE0D,OAAQA,KAGxDE,eAAgB1B,GACd,MAAMwB,EAAS,GAIf,OAHIxB,IACFwB,EAAOC,UAAYzB,GAEdQ,IAAMa,IAAI,oBAAgBvD,EAAW,CAAE0D,OAAQA,KAGxDG,cAAenM,GACb,OAAOgL,IAAM5N,IAAI,kCAAoC4C,IAGvDkH,QACE,OAAO8D,IAAM5N,IAAI,gBAGnBgP,cACE,OAAOpB,IAAMa,IAAI,sBAGnBQ,aAAcC,GACZ,OAAOtB,IAAMuB,OAAO,qBAAuBD,IAG7CE,WAAYF,EAAQG,GAClB,OAAOzB,IAAMa,IAAI,qBAAuBS,EAAS,iBAAmBG,IAGtEC,UAAWC,GACT,OAAO3B,IAAM4B,KAAK,8BAAgCD,GAAKE,KAAM3B,IAC3DK,EAAMC,SAAS,mBAAoB,CAAEX,KAAMK,EAASvQ,KAAKwM,MAAQ,4BAA6ByD,KAAM,OAAQE,QAAS,MAC9GY,QAAQ9L,QAAQsL,MAI3B4B,eAAgBH,GACd,IAAII,EAAW,EAIf,OAHIxB,EAAMtH,QAAQY,aAAe0G,EAAMtH,QAAQY,YAAYvF,KACzDyN,EAAWxB,EAAMtH,QAAQY,YAAYkI,SAAW,GAE3C/B,IAAM4B,KAAK,8BAAgCD,EAAM,aAAeI,GAAUF,KAAM3B,IACrFK,EAAMC,SAAS,mBAAoB,CAAEX,KAAMK,EAASvQ,KAAKwM,MAAQ,4BAA6ByD,KAAM,OAAQE,QAAS,MAC9GY,QAAQ9L,QAAQsL,MAI3B8B,qBAAsBhN,GACpB,MAAM2I,EAAU,GAGhB,OAFAA,EAAQ3I,WAAaA,EAEdgL,IAAM4B,KAAK,6BAAyBtE,EAAW,CAAE0D,OAAQrD,IAAWkE,KAAM3B,IAC/EK,EAAMC,SAAS,mBAAoB,CAAEX,KAAMK,EAASvQ,KAAKwM,MAAQ,4BAA6ByD,KAAM,OAAQE,QAAS,MAC9GY,QAAQ9L,QAAQsL,MAI3B+B,0BAA2BjN,GACzB,MAAM2I,EAAU,GAOhB,OANAA,EAAQ3I,WAAaA,EACrB2I,EAAQoE,SAAW,EACfxB,EAAMtH,QAAQY,aAAe0G,EAAMtH,QAAQY,YAAYvF,KACzDqJ,EAAQoE,SAAWxB,EAAMtH,QAAQY,YAAYkI,SAAW,GAGnD/B,IAAM4B,KAAK,6BAAyBtE,EAAW,CAAE0D,OAAQrD,IAAWkE,KAAM3B,IAC/EK,EAAMC,SAAS,mBAAoB,CAAEX,KAAMK,EAASvQ,KAAKwM,MAAQ,4BAA6ByD,KAAM,OAAQE,QAAS,MAC9GY,QAAQ9L,QAAQsL,MAI3BgC,oBAAqBnQ,GACnB,OAAOiO,IAAM4B,KAAK,wBAAoBtE,EAAW,CAAE0D,OAAQ,CAAEjP,KAAMA,KAAU8P,KAAM3B,IACjFK,EAAMC,SAAS,mBAAoB,CAAEX,KAAM,4BAA8B9N,EAAO,IAAK6N,KAAM,OAAQE,QAAS,MACrGY,QAAQ9L,QAAQsL,MAI3BiC,gBACE,OAAOnC,IAAM5N,IAAI,iBAGnBgQ,gBAAiBC,EAAMvG,EAASiG,GAC9B,MAAMpE,EAAU,GAOhB,OANAA,EAAQ0E,KAAOA,EACf1E,EAAQ7B,QAAUA,EAAU,OAAS,QACrC6B,EAAQ2E,MAAQ,OAChB3E,EAAQ4E,SAAW,QACnB5E,EAAQ6E,uBAAyBT,EAE1B/B,IAAM4B,KAAK,6BAAyBtE,EAAW,CAAE0D,OAAQrD,KAGlE8E,uBAAwBzN,EAAY8G,EAASiG,GAC3C,MAAMpE,EAAU,GAOhB,OANAA,EAAQ3I,WAAaA,EACrB2I,EAAQ7B,QAAUA,EAAU,OAAS,QACrC6B,EAAQ2E,MAAQ,OAChB3E,EAAQ4E,SAAW,QACnB5E,EAAQ6E,uBAAyBT,EAE1B/B,IAAM4B,KAAK,6BAAyBtE,EAAW,CAAE0D,OAAQrD,KAGlE+E,YAAa/E,EAAU,IACrB,OAAOqC,IAAMa,IAAI,yBAAqBvD,EAAW,CAAE0D,OAAQrD,KAG7DgF,eAAgBZ,GACd,OAAO/B,IAAMa,IAAI,8BAAgCkB,IAGnDa,cAAetB,GACb,OAAOtB,IAAMa,IAAI,6BAA+BS,IAGlDuB,eACE,OAAO7C,IAAMa,IAAI,uBAGnBiC,cACE,OAAO9C,IAAMa,IAAI,sBAGnBkC,cACE,OAAO/C,IAAMa,IAAI,sBAGnBmC,kBACE,OAAOhD,IAAMa,IAAI,0BAGnBoC,eAAgBC,GACd,MAAMpH,EAAUoH,EAAW,OAAS,QACpC,OAAOlD,IAAMa,IAAI,8BAAgC/E,IAGnDqH,eAAgBD,GACd,MAAMrH,EAAUqH,EAAW,OAAS,QACpC,OAAOlD,IAAMa,IAAI,8BAAgChF,IAGnDuH,cAAeC,GACb,OAAOrD,IAAMa,IAAI,6BAA+BwC,IAGlDC,cAAenJ,GACb,OAAO6F,IAAMa,IAAI,8BAAgC1G,IAGnDoJ,qBAAsBC,EAAUC,GAC9B,OAAOzD,IAAMa,IAAI,8BAAgC4C,EAAe,cAAgBD,IAGlFE,mBAAoBjC,GAClB,OAAOzB,IAAMa,IAAI,iCAAmCY,IAGtDkC,YAAaC,GACX,OAAO5D,IAAMa,IAAI,6BAA+B+C,IAGlDjI,UACE,OAAOqE,IAAM5N,IAAI,kBAGnByR,cAAeL,EAAUlJ,GACvB,OAAO0F,IAAMa,IAAI,iBAAmB2C,EAAUlJ,IAGhDwJ,cAAeN,GACb,OAAOxD,IAAMa,IAAI,iBAAmB2C,EAAW,YAGjDO,gBAAiBC,GACf,OAAOhE,IAAM5N,IAAI,wBAAyB,CAAE4O,OAAQ,CAAEgD,WAAYA,MAGpEC,eAAgBC,GACd,OAAOlE,IAAM5N,IAAI,yBAA2B8R,IAG9CC,sBAAuBD,GACrB,OAAOlE,IAAM5N,IAAI,yBAA2B8R,EAAW,YAGzDE,eAAgBJ,GACd,OAAOhE,IAAM5N,IAAI,uBAAwB,CAAE4O,OAAQ,CAAEgD,WAAYA,MAGnEK,cAAeC,GACb,OAAOtE,IAAM5N,IAAI,wBAA0BkS,IAG7CC,qBAAsBD,EAASE,EAAS,CAAEC,OAAQ,EAAGC,OAAQ,IAC3D,OAAO1E,IAAM5N,IAAI,wBAA0BkS,EAAU,UAAW,CAC9DtD,OAAQwD,KAIZG,2BAA4BL,EAASM,GACnC,OAAO5E,IAAMa,IAAI,wBAA0ByD,EAAU,eAAWhH,EAAW,CAAE0D,OAAQ4D,KAGvFC,iBACE,OAAO7E,IAAM5N,IAAI,yBAGnB0S,cAAeC,GACb,MAAMC,EAAc,CAClBpF,KAAM,SACNoE,WAAY,QACZhP,WAAY,aAAe+P,EAAQ,KAErC,OAAO/E,IAAM5N,IAAI,eAAgB,CAC/B4O,OAAQgE,KAIZC,qBAAsBF,GACpB,MAAMC,EAAc,CAClBpF,KAAM,SACNoE,WAAY,QACZhP,WAAY,aAAe+P,EAAQ,KAErC,OAAO/E,IAAM5N,IAAI,eAAgB,CAC/B4O,OAAQgE,KAIZE,wBACE,MAAMlE,EAAS,CACbpB,KAAM,SACNoE,WAAY,QACZhP,WAAY,wCAEd,OAAOgL,IAAM5N,IAAI,eAAgB,CAC/B4O,OAAQA,KAIZmE,oBACE,OAAOnF,IAAM5N,IAAI,4BAGnBgT,iBAAkBC,GAChB,MAAMrE,EAAS,CACbpB,KAAM,SACNoE,WAAY,QACZhP,WAAY,gBAAkBqQ,EAAW,KAE3C,OAAOrF,IAAM5N,IAAI,eAAgB,CAC/B4O,OAAQA,KAIZsE,wBAAyBD,GACvB,MAAMrE,EAAS,CACbpB,KAAM,SACNoE,WAAY,QACZhP,WAAY,gBAAkBqQ,EAAW,KAE3C,OAAOrF,IAAM5N,IAAI,eAAgB,CAC/B4O,OAAQA,KAIZuE,sBAAuBxL,GACrB,GAAIA,EAAQ,CACV,MAAMyL,EAAe,CACnB5F,KAAM,SACN5K,WAAY,oBAAsB+E,EAAS,KAE7C,OAAOiG,IAAM5N,IAAI,eAAgB,CAC/B4O,OAAQwE,MAKdC,gCACE,MAAMC,EAAiB,CACrB9F,KAAM,SACN5K,WAAY,qEAEd,OAAOgL,IAAM5N,IAAI,eAAgB,CAC/B4O,OAAQ0E,KAIZC,yBAA0BrB,GACxB,MAAMoB,EAAiB,CACrB9F,KAAM,SACN5K,WAAY,6CAA+CsP,EAAU,iCAEvE,OAAOtE,IAAM5N,IAAI,eAAgB,CAC/B4O,OAAQ0E,KAIZE,YAAaC,GACX,OAAO7F,IAAM4B,KAAK,yBAAqBtE,EAAW,CAAE0D,OAAQ,CAAE6E,IAAKA,MAGrEC,wBAAyBC,GACvB,OAAO/F,IAAMuB,OAAO,2BAA6BwE,OAAYzI,IAG/D0I,oBACE,OAAOhG,IAAM5N,IAAI,4BAGnB6T,wBAAyBF,EAAa,GACpC,OAAO/F,IAAM5N,IAAI,2BAA6B2T,EAAa,eAG7DG,iBAAkBH,GAChB,OAAO/F,IAAM5N,IAAI,2BAA6B2T,IAGhDI,wBAAyBJ,GACvB,OAAO/F,IAAM5N,IAAI,2BAA6B2T,EAAa,YAG7DK,cAAeC,GACb,OAAOrG,IAAM5N,IAAI,wBAA0BiU,IAG7CC,wBAAyBD,GACvB,OAAOrG,IAAM5N,IAAI,wBAA0BiU,EAAU,eAGvDE,qBAAsBF,EAASzB,EAAa,IAC1C,OAAO5E,IAAMa,IAAI,wBAA0BwF,OAAS/I,EAAW,CAAE0D,OAAQ4D,KAG3E4B,cAAeC,GACb,MAAMC,EAAc,CAAED,UAAWA,GACjC,OAAOzG,IAAM5N,IAAI,sBAAuB,CACtC4O,OAAQ0F,KAIZC,OAAQC,GACN,OAAO5G,IAAM5N,IAAI,eAAgB,CAC/B4O,OAAQ4F,KAIZpN,UACE,OAAOwG,IAAM5N,IAAI,kBAGnByU,cAAeC,GACb,OAAO9G,IAAM4B,KAAK,sBAAuBkF,IAG3CC,iBACE,OAAO/G,IAAM5N,IAAI,yBAGnBiK,SACE,OAAO2D,IAAM5N,IAAI,iBAGnB4U,aAAcF,GACZ,OAAO9G,IAAM4B,KAAK,qBAAsBkF,IAG1CG,cAAeH,GACb,OAAO9G,IAAM5N,IAAI,wBAGnBkK,UACE,OAAO0D,IAAM5N,IAAI,kBAGnB8U,gBAAiBC,GACf,OAAOnH,IAAM4B,KAAK,gBAAiBuF,IAGrCC,+BAAgCC,EAAYC,EAAW,IAAKC,EAAY,KACtE,OAAIF,GAAcA,EAAW9O,WAAW,KAClC8O,EAAWG,SAAS,KACfH,EAAa,aAAeC,EAAW,cAAgBC,EAEzDF,EAAa,aAAeC,EAAW,cAAgBC,EAEzDF,ICnaI,IACbI,OAAQ,IAAIC,MACZC,SAAU,KACVC,QAAS,KACTC,MAAO,KAGPC,aACE,MAAMC,EAAe1U,OAAO0U,cAAgB1U,OAAO2U,mBAcnD,OAbAtU,KAAKiU,SAAW,IAAII,EACpBrU,KAAKkU,QAAUlU,KAAKiU,SAASM,yBAAyBvU,KAAK+T,QAC3D/T,KAAKmU,MAAQnU,KAAKiU,SAASO,aAE3BxU,KAAKkU,QAAQO,QAAQzU,KAAKmU,OAC1BnU,KAAKmU,MAAMM,QAAQzU,KAAKiU,SAASS,aAEjC1U,KAAK+T,OAAOY,iBAAiB,iBAAkB7T,IAC7Cd,KAAK+T,OAAOa,SAEd5U,KAAK+T,OAAOY,iBAAiB,UAAW7T,IACtCd,KAAK+T,OAAOa,SAEP5U,KAAK+T,QAIdc,UAAWpO,GACJzG,KAAKmU,QACV1N,EAASqO,WAAWrO,IAAW,EAC/BA,EAAUA,EAAS,EAAK,EAAIA,EAC5BA,EAAUA,EAAS,EAAK,EAAIA,EAC5BzG,KAAKmU,MAAMY,KAAKjW,MAAQ2H,IAI1BuO,WAAYC,GACVjV,KAAKkV,YACLlV,KAAKiU,SAASkB,SAAShH,KAAK,KAC1BnO,KAAK+T,OAAOqB,IAAM7Q,OAAO0Q,GAAU,IAAM,MAAQI,KAAKC,MACtDtV,KAAK+T,OAAOwB,YAAc,YAC1BvV,KAAK+T,OAAOyB,UAKhBN,YACE,IAAMlV,KAAK+T,OAAO0B,QAAU,MAAO3U,IACnC,IAAMd,KAAK+T,OAAO2B,OAAS,MAAO5U,IAClC,IAAMd,KAAK+T,OAAO4B,QAAU,MAAO7U,OCpDnC,GAAS,WAAa,IAAIf,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,MAAM,CAACE,YAAY,aAAaC,YAAY,CAAC,YAAY,MAAM,CAACH,EAAG,IAAI,CAACE,YAAY,4BAA4B,CAACF,EAAG,OAAO,CAACE,YAAY,qBAAqB0B,MAAM,CAAE,uBAAwBhC,EAAI6G,OAAOgP,UAAWpU,GAAG,CAAC,MAAQzB,EAAI8V,cAAc,CAAC1V,EAAG,IAAI,CAACE,YAAY,eAAe0B,MAAMhC,EAAI+V,WAAW3U,MAAM,CAAC,MAAQpB,EAAI6G,OAAOsF,cAAc/L,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,UAAU0B,MAAM,CAAE,uBAAwBhC,EAAI6G,OAAOgP,WAAY,CAAC7V,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI6G,OAAOvI,SAAS8B,EAAG,eAAe,CAACE,YAAY,uBAAuBc,MAAM,CAAC,IAAM,IAAI,IAAM,MAAM,KAAO,IAAI,UAAYpB,EAAI6G,OAAOgP,SAAS,MAAQ7V,EAAI0G,QAAQjF,GAAG,CAAC,OAASzB,EAAI2G,eAAe,YACn7B,GAAkB,G,wBCmCtB,IACErI,KAAM,mBACNiH,WAAY,CAAd,kBAEEjB,MAAO,CAAC,UAERK,SAAU,CACR,aACE,OAAI1E,KAAK4G,OAAOsF,KAAKrH,WAAW,WACvB,cACf,gCACe,WACf,0BACe,WAEA,cAIX,SACE,OAAO7E,KAAK4G,OAAOgP,SAAW5V,KAAK4G,OAAOH,OAAS,IAIvDxB,QAAS,CACP8Q,UAAW,WACTC,EAAO3G,eAGT3I,WAAY,SAAUuP,GACpBD,EAAOnG,qBAAqB7P,KAAK4G,OAAOhG,GAAIqV,IAG9CJ,YAAa,WACX,MAAMK,EAAS,CACbN,UAAW5V,KAAK4G,OAAOgP,UAEzBI,EAAO7F,cAAcnQ,KAAK4G,OAAOhG,GAAIsV,MCzE+S,MCOtV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAInW,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,IAAI,CAACgB,MAAM,CAAC,SAAWpB,EAAIoW,UAAU3U,GAAG,CAAC,MAAQzB,EAAIqW,oBAAoB,CAACjW,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,MAAM0B,MAAM,CAAChC,EAAIsW,WAAY,CAAE,YAAatW,EAAIuW,WAAY,YAAavW,EAAIuW,YAAcvW,EAAIwW,iBAAkB,WAAYxW,EAAIuW,aAAevW,EAAIwW,0BACjX,GAAkB,GCQtB,IACElY,KAAM,wBAENgG,MAAO,CACLgS,WAAY9R,OACZiS,sBAAuB/R,SAGzBC,SAAU,CACR,aACE,MAA0C,SAAnC1E,KAAK8E,OAAOC,MAAMU,OAAOV,OAGlC,mBACE,OAAO,KAAb,4BACA,oDAGI,WACE,OAAQ/E,KAAK8E,OAAOC,MAAMyD,OAASxI,KAAK8E,OAAOC,MAAMyD,MAAMC,OAAS,IAIxExD,QAAS,CACPmR,kBAAmB,WACbpW,KAAKmW,SACHnW,KAAKwW,uBACPxW,KAAK8E,OAAOgI,SAAS,mBAAoB,CAAnD,mEAKU9M,KAAKsW,YAActW,KAAKuW,iBAC1BP,EAAO7G,eACf,wCACQ6G,EAAO5G,cAEP4G,EAAOhH,iBC9CgV,MCO3V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIjP,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,IAAI,CAACgB,MAAM,CAAC,SAAWpB,EAAIoW,UAAU3U,GAAG,CAAC,MAAQzB,EAAIgW,YAAY,CAAC5V,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,uBAAuB0B,MAAMhC,EAAIsW,kBACtP,GAAkB,GCQtB,IACEhY,KAAM,mBAENgG,MAAO,CACLgS,WAAY9R,QAGdG,SAAU,CACR,WACE,OAAQ1E,KAAK8E,OAAOC,MAAMyD,OAASxI,KAAK8E,OAAOC,MAAMyD,MAAMC,OAAS,IAIxExD,QAAS,CACP8Q,UAAW,WACL/V,KAAKmW,UAITH,EAAO3G,iBC5B6U,MCOtV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAItP,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,IAAI,CAACgB,MAAM,CAAC,SAAWpB,EAAIoW,UAAU3U,GAAG,CAAC,MAAQzB,EAAI0W,gBAAgB,CAACtW,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,wBAAwB0B,MAAMhC,EAAIsW,kBAC3P,GAAkB,GCQtB,IACEhY,KAAM,uBAENgG,MAAO,CACLgS,WAAY9R,QAGdG,SAAU,CACR,WACE,OAAQ1E,KAAK8E,OAAOC,MAAMyD,OAASxI,KAAK8E,OAAOC,MAAMyD,MAAMC,OAAS,IAIxExD,QAAS,CACPwR,cAAe,WACTzW,KAAKmW,UAITH,EAAO1G,qBC5BiV,MCO1V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIvP,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,IAAI,CAAC4B,MAAM,CAAE,aAAchC,EAAI2W,YAAalV,GAAG,CAAC,MAAQzB,EAAI4W,sBAAsB,CAACxW,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,MAAM0B,MAAM,CAAChC,EAAIsW,WAAY,CAAE,cAAetW,EAAI2W,WAAY,wBAAyB3W,EAAI2W,oBACjU,GAAkB,GCQtB,IACErY,KAAM,sBAENgG,MAAO,CACLgS,WAAY9R,QAGdG,SAAU,CACR,aACE,OAAO1E,KAAK8E,OAAOC,MAAMU,OAAO2C,UAIpCnD,QAAS,CACP0R,oBAAqB,WACnBX,EAAOzG,gBAAgBvP,KAAK0W,eCxB2T,MCOzV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI3W,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,IAAI,CAAC4B,MAAM,CAAE,aAAchC,EAAI6W,YAAapV,GAAG,CAAC,MAAQzB,EAAI8W,sBAAsB,CAAC1W,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,eAAe0B,MAAMhC,EAAIsW,kBAC/P,GAAkB,GCQtB,IACEhY,KAAM,sBAENgG,MAAO,CACLgS,WAAY9R,QAGdG,SAAU,CACR,aACE,OAAO1E,KAAK8E,OAAOC,MAAMU,OAAO0C,UAIpClD,QAAS,CACP4R,oBAAqB,WACnBb,EAAOvG,gBAAgBzP,KAAK4W,eCxB2T,MCOzV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI7W,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,IAAI,CAAC4B,MAAM,CAAE,cAAehC,EAAI+W,eAAgBtV,GAAG,CAAC,MAAQzB,EAAIgX,qBAAqB,CAAC5W,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,MAAM0B,MAAM,CAAChC,EAAIsW,WAAY,CAAE,aAActW,EAAIiX,cAAe,kBAAmBjX,EAAIkX,iBAAkB,iBAAkBlX,EAAI+W,uBACxW,GAAkB,GCQtB,IACEzY,KAAM,qBAENgG,MAAO,CACLgS,WAAY9R,QAGdG,SAAU,CACR,gBACE,MAA2C,QAApC1E,KAAK8E,OAAOC,MAAMU,OAAOyC,QAElC,mBACE,MAA2C,WAApClI,KAAK8E,OAAOC,MAAMU,OAAOyC,QAElC,gBACE,OAAQlI,KAAKgX,gBAAkBhX,KAAKiX,mBAIxChS,QAAS,CACP8R,mBAAoB,WACd/W,KAAKgX,cACPhB,EAAOtG,cAAc,UAC7B,sBACQsG,EAAOtG,cAAc,OAErBsG,EAAOtG,cAAc,UCnC+T,MCOxV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI3P,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAQF,EAAW,QAAEI,EAAG,IAAI,CAACgB,MAAM,CAAC,SAAWpB,EAAIoW,UAAU3U,GAAG,CAAC,MAAQzB,EAAImX,OAAO,CAAC/W,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,iBAAiB0B,MAAMhC,EAAIsW,iBAAiBtW,EAAI+B,MAC9Q,GAAkB,GCQtB,IACEzD,KAAM,uBACNgG,MAAO,CAAC,UAAW,cAEnBK,SAAU,CACR,cACE,OAAO1E,KAAK8E,OAAOS,QAAQY,aAE7B,aACE,MAA0C,SAAnCnG,KAAK8E,OAAOC,MAAMU,OAAOV,OAElC,WACE,OAAQ/E,KAAK8E,OAAOC,MAAMyD,OAASxI,KAAK8E,OAAOC,MAAMyD,MAAMC,OAAS,GAAKzI,KAAKmX,YACpF,qCAEI,UACE,MAAO,CAAC,UAAW,aAAarD,SAAS9T,KAAKmG,YAAYmK,cAI9DrL,QAAS,CACPiS,KAAM,WACClX,KAAKmW,UACRH,EAAO/F,aAA4B,EAAhBjQ,KAAKoX,YChC8T,MCO1V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIrX,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAQF,EAAW,QAAEI,EAAG,IAAI,CAACgB,MAAM,CAAC,SAAWpB,EAAIoW,UAAU3U,GAAG,CAAC,MAAQzB,EAAImX,OAAO,CAAC/W,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,uBAAuB0B,MAAMhC,EAAIsW,iBAAiBtW,EAAI+B,MACpR,GAAkB,GCQtB,IACEzD,KAAM,0BACNgG,MAAO,CAAC,UAAW,cAEnBK,SAAU,CACR,cACE,OAAO1E,KAAK8E,OAAOS,QAAQY,aAE7B,aACE,MAA0C,SAAnCnG,KAAK8E,OAAOC,MAAMU,OAAOV,OAElC,WACE,OAAQ/E,KAAK8E,OAAOC,MAAMyD,OAASxI,KAAK8E,OAAOC,MAAMyD,MAAMC,OAAS,GAAKzI,KAAKmX,YACpF,qCAEI,UACE,MAAO,CAAC,UAAW,aAAarD,SAAS9T,KAAKmG,YAAYmK,cAI9DrL,QAAS,CACPiS,KAAM,WACClX,KAAKmW,UACRH,EAAO/F,YAAYjQ,KAAKoX,YChCiU,MCO7V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCkMf,IACE/Y,KAAM,eACNiH,WAAY,CACV+R,eAAJ,EACIC,iBAAJ,GACIC,YAAJ,KACIC,sBAAJ,GACIC,iBAAJ,GACIC,qBAAJ,GACIC,oBAAJ,GACIC,oBAAJ,GACIC,mBAAJ,GACIC,wBAAJ,GACIC,qBAAJ,IAGE,OACE,MAAO,CACLC,WAAY,EAEZlR,SAAS,EACTD,SAAS,EACTG,cAAe,GAEfiR,mBAAmB,EACnBC,2BAA2B,IAI/BxT,SAAU,CACR9C,iBAAkB,CAChB,MACE,OAAO5B,KAAK8E,OAAOC,MAAMnD,kBAE3B,IAAN,GACQ5B,KAAK8E,OAAOE,OAAO,EAA3B,KAII,mBACE,OAAOhF,KAAK8E,OAAOC,MAAMpD,kBAG3B,SACE,OAAI3B,KAAK2B,iBACA,cAEF,IAGT,QACE,OAAO3B,KAAK8E,OAAOC,MAAMU,QAE3B,cACE,OAAOzF,KAAK8E,OAAOS,QAAQY,aAE7B,sBACE,MAA4B,iBAArBnG,KAAK2E,OAAOC,MAErB,UACE,OAAO5E,KAAK8E,OAAOC,MAAMkD,SAG3B,SACE,OAAOjI,KAAK8E,OAAOC,MAAMU,QAG3B,SACE,OAAOzF,KAAK8E,OAAOC,MAAMW,SAI7BT,QAAS,CACP,2BACEjF,KAAKiY,mBAAoB,GAG3BvR,WAAY,SAAUuP,GACpBD,EAAOpG,cAAcqG,IAGvBzP,mBAAoB,WACdxG,KAAKyF,OAAOgB,OAAS,EACvBzG,KAAK0G,WAAW,GAEhB1G,KAAK0G,WAAW1G,KAAKgY,aAIzB5D,WAAY,WACV,MAAM+D,EAAI,GAAhB,aAEMA,EAAExD,iBAAiB,UAAW7T,IAC5Bd,KAAK8G,SAAU,EACf9G,KAAK6G,SAAU,IAEjBsR,EAAExD,iBAAiB,UAAW7T,IAC5Bd,KAAK8G,SAAU,EACf9G,KAAK6G,SAAU,IAEjBsR,EAAExD,iBAAiB,QAAS7T,IAC1Bd,KAAK8G,SAAU,EACf9G,KAAK6G,SAAU,IAEjBsR,EAAExD,iBAAiB,QAAS7T,IAC1Bd,KAAKoY,aACLpY,KAAK8E,OAAOgI,SAAS,mBAAoB,CAAjD,0GACQ9M,KAAK8G,SAAU,EACf9G,KAAK6G,SAAU,KAKnBuR,WAAY,WACV,GAAN,YACMpY,KAAK8G,SAAU,GAGjBuR,YAAa,WACX,GAAIrY,KAAK8G,QACP,OAGF,MAAMwR,EAAU,cAChBtY,KAAK6G,SAAU,EACf,GAAN,cACM,GAAN,mCAGIE,WAAY,WACV,IAAI/G,KAAK6G,QAGT,OAAI7G,KAAK8G,QACA9G,KAAKoY,aAEPpY,KAAKqY,eAGdpR,kBAAmB,SAAUgP,GAC3BjW,KAAKgH,cAAgBiP,EACrB,GAAN,oCAIEjQ,MAAO,CACL,+BACMhG,KAAKyF,OAAOgB,OAAS,IACvBzG,KAAKgY,WAAahY,KAAKyF,OAAOgB,UAMpC,UACEzG,KAAKoU,cAIP,YACEpU,KAAKoY,eCpX6U,MCOlV,GAAY,eACd,GACA,EACA,GACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIrY,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAQF,EAAIgJ,cAActM,OAAS,EAAG0D,EAAG,UAAU,CAACE,YAAY,oBAAoB,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,MAAM,CAACE,YAAY,kBAAkBN,EAAI4G,GAAI5G,EAAiB,eAAE,SAASiL,GAAc,OAAO7K,EAAG,MAAM,CAACf,IAAI4L,EAAapK,GAAGP,YAAY,2BAA2B0B,MAAM,CAAC,eAAgBiJ,EAAakB,KAAQ,MAASlB,EAAiB,KAAK,KAAK,CAAC7K,EAAG,SAAS,CAACE,YAAY,SAASmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIwY,OAAOvN,OAAkBjL,EAAIoC,GAAG,IAAIpC,EAAImG,GAAG8E,EAAamB,MAAM,UAAS,OAAOpM,EAAI+B,MAC3mB,GAAkB,GCetB,IACEzD,KAAM,gBACNiH,WAAY,GAEZ,OACE,MAAO,CAAX,aAGEZ,SAAU,CACR,gBACE,OAAO1E,KAAK8E,OAAOC,MAAMgE,cAAcE,OAI3ChE,QAAS,CACPsT,OAAQ,SAAUvN,GAChBhL,KAAK8E,OAAOE,OAAO,EAAzB,MChCuV,MCQnV,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,OAIa,M,QCnBX,GAAS,WAAa,IAAIjF,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,8BAA8BhC,EAAG,OAAO,CAACqB,GAAG,CAAC,OAAS,SAASC,GAAgC,OAAxBA,EAAOY,iBAAwBtC,EAAI0Y,gBAAgBrb,MAAM,KAAMsb,cAAc,CAACvY,EAAG,QAAQ,CAACE,YAAY,SAAS,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAI6I,QAAQ+P,QAAQ,OAAOxY,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAI6Y,YAAe,IAAEtX,WAAW,oBAAoBuX,IAAI,YAAYxY,YAAY,QAAQc,MAAM,CAAC,KAAO,OAAO,YAAc,sBAAsB2X,SAAS,CAAC,MAAS/Y,EAAI6Y,YAAe,KAAGpX,GAAG,CAAC,MAAQ,SAASC,GAAWA,EAAOsX,OAAOC,WAAqBjZ,EAAIkZ,KAAKlZ,EAAI6Y,YAAa,MAAOnX,EAAOsX,OAAOja,mBAAmBqB,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,mCAAmCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,YAAY,CAACrY,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,qBAAqBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,cAAchC,EAAG,IAAI,CAACE,YAAY,2EAA2EmB,GAAG,CAAC,MAAQzB,EAAI0Y,kBAAkB,CAACtY,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,+BAA+BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,yBAAyBhC,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IACx1D,GAAkB,GCwCtB,IACEzD,KAAM,2BACNgG,MAAO,CAAC,QAER,OACE,MAAO,CACLuU,YAAa,CAAnB,UAIElU,SAAU,CACR,UACE,OAAO1E,KAAK8E,OAAOC,MAAM6D,UAI7B3D,QAAS,CACP,kBACE+Q,EAAOxC,gBAAgBxT,KAAK4Y,aAAazK,KAAK,KAC5CnO,KAAK4Y,YAAYM,IAAM,OAK7BlT,MAAO,CACL,OACMhG,KAAKmZ,OACPnZ,KAAK6G,SAAU,EAGfwF,WAAW,KACTrM,KAAKoZ,MAAMC,UAAUC,SAC/B,QCzEkW,MCO9V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIvZ,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,eAAe,CAACgB,MAAM,CAAC,KAAOpB,EAAIoZ,KAAK,MAAQ,iBAAiB,UAAYpZ,EAAI4F,QAAQoC,SAAW,GAAK,SAAS,aAAe,SAASvG,GAAG,CAAC,GAAKzB,EAAIwZ,eAAe,MAAQ,SAAS9X,GAAQ,OAAO1B,EAAI4V,WAAW,CAACxV,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAAGzZ,EAAI4F,QAAQoC,SAAyvD5H,EAAG,MAAM,CAACA,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIoC,GAAG,sCAA7xDhC,EAAG,MAAM,CAACA,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIoC,GAAG,8CAA+CpC,EAAI0Z,iBAAmB1Z,EAAI2Z,IAAIC,OAAS,EAAGxZ,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,SAAS,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAA2B,wBAAEuB,WAAW,4BAA4BE,GAAG,CAAC,OAAS,SAASC,GAAQ,IAAImY,EAAgBC,MAAMld,UAAUmU,OAAOjU,KAAK4E,EAAOsX,OAAO9O,SAAQ,SAAS1L,GAAG,OAAOA,EAAEqX,YAAWnV,KAAI,SAASlC,GAAG,IAAIub,EAAM,WAAYvb,EAAIA,EAAEwb,OAASxb,EAAEO,MAAM,OAAOgb,KAAO/Z,EAAI0J,wBAAwBhI,EAAOsX,OAAOiB,SAAWJ,EAAgBA,EAAc,MAAM,CAACzZ,EAAG,SAAS,CAACgB,MAAM,CAAC,MAAQ,KAAK,CAACpB,EAAIoC,GAAG,uBAAuBhC,EAAG,SAAS,CAACgB,MAAM,CAAC,MAAQ,UAAU,CAACpB,EAAIoC,GAAG,+BAAgCpC,EAAmB,gBAAEI,EAAG,SAAS,CAACgB,MAAM,CAAC,MAAQ,YAAY,CAACpB,EAAIoC,GAAG,yBAAyBpC,EAAI+B,KAAM/B,EAAI2Z,IAAIC,OAAS,EAAGxZ,EAAG,SAAS,CAACgB,MAAM,CAAC,MAAQ,QAAQ,CAACpB,EAAIoC,GAAG,2BAA2BpC,EAAI+B,aAAa/B,EAAI+B,KAAK3B,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,QAAQ,CAACE,YAAY,+BAA+B,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAmB,gBAAEuB,WAAW,oBAAoBH,MAAM,CAAC,KAAO,YAAY2X,SAAS,CAAC,QAAUe,MAAMI,QAAQla,EAAIma,iBAAiBna,EAAIoa,GAAGpa,EAAIma,gBAAgB,OAAO,EAAGna,EAAmB,iBAAGyB,GAAG,CAAC,OAAS,SAASC,GAAQ,IAAI2Y,EAAIra,EAAIma,gBAAgBG,EAAK5Y,EAAOsX,OAAOuB,IAAID,EAAKE,QAAuB,GAAGV,MAAMI,QAAQG,GAAK,CAAC,IAAII,EAAI,KAAKC,EAAI1a,EAAIoa,GAAGC,EAAII,GAAQH,EAAKE,QAASE,EAAI,IAAI1a,EAAIma,gBAAgBE,EAAIM,OAAO,CAACF,KAAYC,GAAK,IAAI1a,EAAIma,gBAAgBE,EAAIva,MAAM,EAAE4a,GAAKC,OAAON,EAAIva,MAAM4a,EAAI,UAAW1a,EAAIma,gBAAgBI,MAASva,EAAIoC,GAAG,mDAAuI,IACxrE,GAAkB,GCDlB,GAAS,WAAa,IAAIpC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAAEN,EAAS,MAAEI,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAIqG,OAAO,OAAOrG,EAAI+B,KAAK/B,EAAIQ,GAAG,kBAAkB,GAAGJ,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,YAAY,CAACrY,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,qBAAqBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI4a,aAAe5a,EAAI4a,aAAe,eAAgB5a,EAAiB,cAAEI,EAAG,IAAI,CAACE,YAAY,6EAA6EmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAa,CAACrY,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,qBAAqBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI6a,oBAAoB7a,EAAI+B,KAAM/B,EAAa,UAAEI,EAAG,IAAI,CAACE,YAAY,2EAA2EmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,SAAS,CAACrY,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,oBAAoBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI8a,gBAAgB9a,EAAI+B,WAAW3B,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IACnrD,GAAkB,GCgCtB,IACEzD,KAAM,cACNgG,MAAO,CAAC,OAAQ,QAAS,YAAa,gBAAiB,iBCnC4R,MCOjV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCwBf,IACEhG,KAAM,oBACNiH,WAAY,CAAd,gBACEjB,MAAO,CAAC,QAER,OACE,MAAO,CACL6V,iBAAiB,IAIrBxV,SAAU,CACR,UACE,OAAO1E,KAAK8E,OAAOC,MAAMY,SAG3B,MACE,OAAO3F,KAAK8E,OAAOC,MAAMiD,WAG3B,kBACE,OAAOhI,KAAK8E,OAAOC,MAAMe,QAAQC,oBAGnC0D,wBAAyB,CACvB,MACE,OAAOzJ,KAAK8E,OAAOC,MAAM0E,yBAE3B,IAAN,GACQzJ,KAAK8E,OAAOE,OAAO,EAA3B,MAKEC,QAAS,CACP,iBACMjF,KAAKka,gBACPlE,EAAOxI,eAAexN,KAAKyJ,yBAE3BuM,EAAO3I,eAAerN,KAAKyJ,0BAI/B,QACEzJ,KAAKyJ,wBAA0B,GAC/BzJ,KAAKwY,MAAM,YCvF0U,MCOvV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,wDCYf,IACEna,KAAM,MACNiH,WAAY,CAAd,+FACEwV,SAAU,SAEV,OACE,MAAO,CACLC,eAAgB,EAChBC,mBAAoB,EACpBzZ,gBAAgB,IAIpBmD,SAAU,CACR/C,iBAAkB,CAChB,MACE,OAAO3B,KAAK8E,OAAOC,MAAMpD,kBAE3B,IAAN,GACQ3B,KAAK8E,OAAOE,OAAO,EAA3B,KAGIpD,iBAAkB,CAChB,MACE,OAAO5B,KAAK8E,OAAOC,MAAMnD,kBAE3B,IAAN,GACQ5B,KAAK8E,OAAOE,OAAO,EAA3B,KAGItD,mBAAoB,CAClB,MACE,OAAO1B,KAAK8E,OAAOC,MAAMrD,oBAE3B,IAAN,GACQ1B,KAAK8E,OAAOE,OAAO,EAA3B,MAKEiW,QAAS,WACP,GAAJ,6BACIjb,KAAKyU,UAGLzU,KAAKkb,UAAUC,QAGfnb,KAAKkF,QAAQkW,WAAW,CAAC9W,EAAI+W,EAAMC,KACjC,GAAIhX,EAAGiX,KAAKC,cAAe,CACzB,QAAyB5R,IAArBtF,EAAGiX,KAAKE,SAAwB,CAClC,MAAMF,EAAOjX,EAAGiX,KAAKE,SACrBzb,KAAKkb,UAAUQ,UAAUH,GAE3Bvb,KAAKkb,UAAUC,QAEjBG,MAIFtb,KAAKkF,QAAQyW,UAAU,CAACrX,EAAI+W,KACtB/W,EAAGiX,KAAKC,eACVxb,KAAKkb,UAAUU,YAKrB3W,QAAS,CACPwP,QAAS,WACPzU,KAAK8E,OAAOgI,SAAS,mBAAoB,CAA/C,iFAEMkJ,EAAOtQ,SAASyI,KAAK,EAA3B,WACQnO,KAAK8E,OAAOE,OAAO,EAA3B,GACQhF,KAAK8E,OAAOE,OAAO,EAA3B,gBACQ6W,SAASzV,MAAQnK,EAAK6f,aAEtB9b,KAAK+b,UACL/b,KAAKkb,UAAUU,WACvB,WACQ5b,KAAK8E,OAAOgI,SAAS,mBAAoB,CAAjD,iFAIIiP,QAAS,WACP,GAAI/b,KAAK8E,OAAOC,MAAMW,OAAO4B,gBAAkB,EAE7C,YADAtH,KAAK8E,OAAOgI,SAAS,mBAAoB,CAAjD,8CAIM,MAAMkP,EAAKhc,KAEX,IAAIic,EAAW,QACkB,WAA7Btc,OAAOuc,SAASD,WAClBA,EAAW,UAGb,IAAIE,EAAQF,EAAWtc,OAAOuc,SAASE,SAAW,IAAMJ,EAAGlX,OAAOC,MAAMW,OAAO4B,eAM/E,MAAM+U,EAAS,IAAI,GAAzB,EACA,EACA,SACA,CAAQ,kBAAR,MAGMA,EAAOC,OAAS,WACdN,EAAGlX,OAAOgI,SAAS,mBAAoB,CAA/C,wFACQkP,EAAGhB,mBAAqB,EACxBqB,EAAOE,KAAKC,KAAKC,UAAU,CAAnC,2GAEQT,EAAGU,iBACHV,EAAGW,uBACHX,EAAGY,uBACHZ,EAAGa,kBACHb,EAAGc,eACHd,EAAGe,iBACHf,EAAGgB,gBACHhB,EAAGiB,kBAELZ,EAAOa,QAAU,aAGjBb,EAAOc,QAAU,WACfnB,EAAGhB,qBACHgB,EAAGlX,OAAOgI,SAAS,mBAAoB,CAA/C,wGAEMuP,EAAOe,UAAY,SAAU5Q,GAC3B,MAAMvQ,EAAOugB,KAAKa,MAAM7Q,EAASvQ,OAC7BA,EAAKqhB,OAAOxJ,SAAS,WAAa7X,EAAKqhB,OAAOxJ,SAAS,cACzDkI,EAAGY,wBAED3gB,EAAKqhB,OAAOxJ,SAAS,WAAa7X,EAAKqhB,OAAOxJ,SAAS,YAAc7X,EAAKqhB,OAAOxJ,SAAS,YAC5FkI,EAAGW,wBAED1gB,EAAKqhB,OAAOxJ,SAAS,YAAc7X,EAAKqhB,OAAOxJ,SAAS,YAC1DkI,EAAGU,iBAEDzgB,EAAKqhB,OAAOxJ,SAAS,UACvBkI,EAAGc,eAED7gB,EAAKqhB,OAAOxJ,SAAS,YACvBkI,EAAGe,iBAED9gB,EAAKqhB,OAAOxJ,SAAS,WACvBkI,EAAGgB,gBAED/gB,EAAKqhB,OAAOxJ,SAAS,YACvBkI,EAAGiB,mBAKTL,qBAAsB,WACpB5G,EAAO5I,gBAAgBe,KAAK,EAAlC,WACQnO,KAAK8E,OAAOE,OAAO,EAA3B,KAEMgR,EAAOvI,cAAc,2BAA2BU,KAAK,EAA3D,WACQnO,KAAK8E,OAAOE,OAAO,EAA3B,KAEMgR,EAAOvI,cAAc,yBAAyBU,KAAK,EAAzD,WACQnO,KAAK8E,OAAOE,OAAO,EAA3B,KAEMgR,EAAOvI,cAAc,oBAAoBU,KAAK,EAApD,WACQnO,KAAK8E,OAAOE,OAAO,EAA3B,MAII0X,eAAgB,WACd1G,EAAO/N,UAAUkG,KAAK,EAA5B,WACQnO,KAAK8E,OAAOE,OAAO,EAA3B,cAII2X,qBAAsB,WACpB3G,EAAOvH,gBAAgBN,KAAK,EAAlC,WACQnO,KAAK8E,OAAOE,OAAO,EAA3B,MAII8X,aAAc,WACZ9G,EAAOxN,QAAQ2F,KAAK,EAA1B,WACQnO,KAAK8E,OAAOE,OAAO,EAA3B,MAII6X,gBAAiB,WACf7G,EAAOvO,WAAW0G,KAAK,EAA7B,WACQnO,KAAK8E,OAAOE,OAAO,EAA3B,MAIIgY,cAAe,WACbhH,EAAOrN,SAASwF,KAAK,EAA3B,WACQnO,KAAK8E,OAAOE,OAAO,EAA3B,MAII+X,eAAgB,WACd/G,EAAOlQ,UAAUqI,KAAK,EAA5B,WACQnO,KAAK8E,OAAOE,OAAO,EAA3B,GAEYhF,KAAK+a,eAAiB,IACxBpb,OAAO4d,aAAavd,KAAK+a,gBACzB/a,KAAK+a,eAAiB,GAEpB9e,EAAKuhB,wBAA0B,GAAKvhB,EAAKwhB,eAC3Czd,KAAK+a,eAAiBpb,OAAO0M,WAAWrM,KAAK+c,eAAgB,IAAO9gB,EAAKuhB,6BAK/EP,eAAgB,WACdjH,EAAOpN,UAAUuF,KAAK,EAA5B,WACQnO,KAAK8E,OAAOE,OAAO,EAA3B,GACQhF,KAAKuB,eAAiBtF,EAAKyhB,UAI/BC,kBAAmB,WACb3d,KAAK2B,kBAAoB3B,KAAK4B,iBAChCia,SAAS+B,cAAc,QAAQC,UAAUC,IAAI,cAE7CjC,SAAS+B,cAAc,QAAQC,UAAUtF,OAAO,gBAKtDvS,MAAO,CACL,mBACEhG,KAAK2d,qBAEP,mBACE3d,KAAK2d,uBCzQmT,MCO1T,GAAY,eACd,GACA7d,EACAU,GACA,EACA,KACA,KACA,MAIa,M,qBClBX,GAAS,WAAa,IAAIT,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIyI,MAAMC,OAAO,aAAatI,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,aAAahC,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,IAAI,CAACE,YAAY,kBAAkB0B,MAAM,CAAE,UAAWhC,EAAIyJ,sBAAuBhI,GAAG,CAAC,MAAQzB,EAAIge,yBAAyB,CAAC5d,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,kCAAkCF,EAAG,OAAO,CAACJ,EAAIoC,GAAG,qBAAqBhC,EAAG,IAAI,CAACE,YAAY,kBAAkBmB,GAAG,CAAC,MAAQzB,EAAIie,yBAAyB,CAAC7d,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,kBAAkBF,EAAG,OAAO,CAACJ,EAAIoC,GAAG,kBAAkBhC,EAAG,IAAI,CAACE,YAAY,kBAAkB0B,MAAM,CAAE,UAAWhC,EAAIke,WAAYzc,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIke,WAAale,EAAIke,aAAa,CAAC9d,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,qBAAqBF,EAAG,OAAO,CAACJ,EAAIoC,GAAG,YAAYhC,EAAG,IAAI,CAACE,YAAY,kBAAkBmB,GAAG,CAAC,MAAQzB,EAAI2N,cAAc,CAACvN,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,2BAA2BF,EAAG,OAAO,CAACJ,EAAIoC,GAAG,aAAcpC,EAAyB,sBAAEI,EAAG,IAAI,CAACE,YAAY,kBAAkBc,MAAM,CAAC,SAAsC,IAA3BpB,EAAIme,YAAYzhB,QAAc+E,GAAG,CAAC,MAAQzB,EAAIoe,cAAc,CAAChe,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,2BAA2BF,EAAG,OAAO,CAACJ,EAAIoC,GAAG,YAAYpC,EAAI+B,SAAS3B,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,YAAY,CAACgB,MAAM,CAAC,OAAS,WAAWK,GAAG,CAAC,IAAMzB,EAAIqe,WAAWC,MAAM,CAACvf,MAAOiB,EAAe,YAAEue,SAAS,SAAU9D,GAAMza,EAAIme,YAAY1D,GAAKlZ,WAAW,gBAAgBvB,EAAI4G,GAAI5G,EAAe,aAAE,SAAS2J,EAAKwB,GAAO,OAAO/K,EAAG,uBAAuB,CAACf,IAAIsK,EAAK9I,GAAGO,MAAM,CAAC,KAAOuI,EAAK,SAAWwB,EAAM,iBAAmBnL,EAAIwe,iBAAiB,qBAAuBxe,EAAIyJ,qBAAqB,UAAYzJ,EAAIke,YAAY,CAAC9d,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAAGzZ,EAAIke,UAA0Lle,EAAI+B,KAAnL3B,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIye,YAAY9U,MAAS,CAACvJ,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,uCAAiDqJ,EAAK9I,KAAOb,EAAIgF,MAAMsD,SAAWtI,EAAIke,UAAW9d,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIwY,OAAO7O,MAAS,CAACvJ,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,gCAAgCN,EAAI+B,QAAQ,MAAK,GAAG3B,EAAG,0BAA0B,CAACgB,MAAM,CAAC,KAAOpB,EAAI0e,mBAAmB,KAAO1e,EAAI2e,eAAeld,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0e,oBAAqB,MAAUte,EAAG,8BAA8B,CAACgB,MAAM,CAAC,KAAOpB,EAAI4e,gBAAgBnd,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI4e,gBAAiB,MAAW5e,EAAyB,sBAAEI,EAAG,6BAA6B,CAACgB,MAAM,CAAC,KAAOpB,EAAI6e,qBAAqBpd,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI6e,qBAAsB,MAAU7e,EAAI+B,MAAM,IAAI,IACxzF,GAAkB,GCDlB,GAAS,WAAa,IAAI/B,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACE,YAAY,sBAAsB,CAACF,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAAEN,EAAI8e,OAAO,WAAY1e,EAAG,UAAU,CAACA,EAAG,MAAM,CAACiB,WAAW,CAAC,CAAC/C,KAAK,qBAAqBgD,QAAQ,uBAAuBvC,MAAOiB,EAAoB,iBAAEuB,WAAW,qBAAqBhB,YAAY,CAAC,OAAS,SAASP,EAAIQ,GAAG,WAAWJ,EAAG,MAAM,CAACE,YAAY,sBAAsBC,YAAY,CAAC,gBAAgB,MAAM,aAAa,SAAS,CAAGP,EAAI+e,gBAA6G3e,EAAG,IAAI,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAIgf,oBAAoB,CAAChf,EAAImC,GAAG,KAAvL/B,EAAG,IAAI,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAIif,gBAAgB,CAACjf,EAAImC,GAAG,QAAwG,GAAGnC,EAAI+B,KAAK3B,EAAG,MAAM,CAAC4B,MAAM,CAAC,yBAA0BhC,EAAI8e,OAAO,aAAa,CAAC1e,EAAG,MAAM,CAACE,YAAY,QAAQc,MAAM,CAAC,GAAK,QAAQ,CAAChB,EAAG,MAAM,CAACE,YAAY,cAAc,CAACF,EAAG,MAAM,CAACE,YAAY,uCAAuC,CAACF,EAAG,MAAM,CAACJ,EAAIQ,GAAG,iBAAiB,OAAOJ,EAAG,MAAM,CAACE,YAAY,wCAAwC,CAACN,EAAIQ,GAAG,kBAAkB,KAAKR,EAAIQ,GAAG,WAAWJ,EAAG,MAAM,CAACG,YAAY,CAAC,aAAa,SAAS,CAACP,EAAIQ,GAAG,WAAW,IAAI,YACjvC,GAAkB,CAAC,WAAa,IAAIR,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,OAAO,CAACE,YAAY,iBAAiB,CAACF,EAAG,IAAI,CAACE,YAAY,0BAA0B,WAAa,IAAIN,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,OAAO,CAACE,YAAY,iBAAiB,CAACF,EAAG,IAAI,CAACE,YAAY,6BCyCjV,IACEhC,KAAM,qBAEN,OACE,MAAO,CACLygB,iBAAiB,EACjBG,iBAAkB,CAChBX,SAAUte,KAAKkf,kBACfC,aAAc,CACZC,WAAY,SACZC,UAAW,OAMnBpa,QAAS,CACP+Z,cAAe,WACbrf,OAAO2f,SAAS,CAAtB,2BAGIP,kBAAmB,WAEb/e,KAAK2E,OAAO4W,KAAKgE,SACnBvf,KAAKwf,UAAU,OAAQ,CAA/B,cAEQxf,KAAKwf,UAAU,OAAQ,CAA/B,eAIIN,kBAAmB,SAAUO,GAC3Bzf,KAAK8e,gBAAkBW,KCzE+T,MCOxV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI1f,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAQF,EAAI2f,UAAY3f,EAAIyJ,qBAAsBrJ,EAAG,MAAM,CAACE,YAAY,SAAS,CAAEN,EAAa,UAAEI,EAAG,MAAM,CAACE,YAAY,cAAc,CAACN,EAAImC,GAAG,KAAKnC,EAAI+B,KAAK3B,EAAG,MAAM,CAACE,YAAY,yCAAyCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,KAAK,CAACE,YAAY,aAAa0B,MAAM,CAAE,mBAAoBhC,EAAI2J,KAAK9I,KAAOb,EAAIgF,MAAMsD,QAAS,uBAAwBtI,EAAI2f,UAAW,CAAC3f,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2J,KAAKtD,UAAUjG,EAAG,KAAK,CAACE,YAAY,gBAAgB0B,MAAM,CAAE,mBAAoBhC,EAAI2J,KAAK9I,KAAOb,EAAIgF,MAAMsD,QAAS,uBAAwBtI,EAAI2f,QAAS,gBAAiB3f,EAAI2f,SAAW3f,EAAI2J,KAAK9I,KAAOb,EAAIgF,MAAMsD,UAAW,CAAClI,EAAG,IAAI,CAACJ,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2J,KAAKrD,aAAalG,EAAG,KAAK,CAACE,YAAY,gBAAgB0B,MAAM,CAAE,mBAAoBhC,EAAI2J,KAAK9I,KAAOb,EAAIgF,MAAMsD,QAAS,uBAAwBtI,EAAI2f,QAAS,gBAAiB3f,EAAI2f,SAAW3f,EAAI2J,KAAK9I,KAAOb,EAAIgF,MAAMsD,UAAW,CAACtI,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2J,KAAKnD,YAAYpG,EAAG,MAAM,CAACE,YAAY,eAAe,CAACN,EAAIQ,GAAG,YAAY,KAAKR,EAAI+B,MACjiC,GAAkB,CAAC,WAAa,IAAI/B,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,OAAO,CAACE,YAAY,2CAA2C,CAACF,EAAG,IAAI,CAACE,YAAY,yCCmBjM,IACEhC,KAAM,oBACNgG,MAAO,CAAC,OAAQ,WAAY,mBAAoB,uBAAwB,aAExEK,SAAU,CACR,QACE,OAAO1E,KAAK8E,OAAOC,MAAMU,QAG3B,UACE,OAAOzF,KAAKue,iBAAmB,GAAKve,KAAKqO,UAAYrO,KAAKue,mBAI9DtZ,QAAS,CACP2P,KAAM,WACJoB,EAAOhH,YAAY,CAAzB,0BCpC2V,MCOvV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIjP,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAI2J,KAAKtD,OAAO,OAAOjG,EAAG,IAAI,CAACE,YAAY,YAAY,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAI2J,KAAKrD,QAAQ,OAAOlG,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,WAAYpC,EAAI2J,KAAa,SAAEvJ,EAAG,IAAI,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAI4f,aAAa,CAAC5f,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2J,KAAKnD,UAAUpG,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2J,KAAKnD,YAAaxG,EAAI2J,KAAiB,aAAEvJ,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,kBAAmBpC,EAAI2J,KAAoB,gBAAEvJ,EAAG,IAAI,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAI6f,oBAAoB,CAAC7f,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2J,KAAKmW,iBAAiB1f,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2J,KAAKmW,mBAAmB9f,EAAI+B,KAAM/B,EAAI2J,KAAa,SAAEvJ,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,cAAchC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2J,KAAKiI,eAAe5R,EAAI+B,KAAM/B,EAAI2J,KAAKoW,KAAO,EAAG3f,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,UAAUhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2J,KAAKoW,WAAW/f,EAAI+B,KAAM/B,EAAI2J,KAAU,MAAEvJ,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAIggB,aAAa,CAAChgB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2J,KAAK2H,YAAYtR,EAAI+B,KAAK3B,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2J,KAAKsW,cAAc,MAAMjgB,EAAImG,GAAGnG,EAAI2J,KAAKuW,kBAAkB9f,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,YAAYhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,WAAPngB,CAAmBA,EAAI2J,KAAKyW,iBAAiBhgB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,UAAUhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2J,KAAK9E,WAAWzE,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,UAAUhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2J,KAAK4G,YAAY,MAAMvQ,EAAImG,GAAGnG,EAAI2J,KAAKpD,WAAW,KAA6B,YAAvBvG,EAAI2J,KAAKpD,UAAyBnG,EAAG,OAAO,CAACE,YAAY,0BAA0B,CAACN,EAAIoC,GAAG,KAAKhC,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQzB,EAAIqgB,sBAAsB,CAACrgB,EAAIoC,GAAG,YAAYpC,EAAIoC,GAAG,MAAMhC,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQzB,EAAIsgB,qBAAqB,CAACtgB,EAAIoC,GAAG,WAAWpC,EAAIoC,GAAG,OAAOpC,EAAI+B,SAAS3B,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,aAAahC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAI2J,KAAKwC,MAAM,KAAMnM,EAAI2J,KAAe,WAAEvJ,EAAG,OAAO,CAACJ,EAAIoC,GAAG,MAAMpC,EAAImG,GAAGnG,EAAI2J,KAAK4W,YAAY,SAASvgB,EAAI+B,KAAM/B,EAAI2J,KAAa,SAAEvJ,EAAG,OAAO,CAACJ,EAAIoC,GAAG,MAAMpC,EAAImG,GAAGnG,EAAImgB,GAAG,WAAPngB,CAAmBA,EAAI2J,KAAK6W,cAAcxgB,EAAI+B,KAAM/B,EAAI2J,KAAY,QAAEvJ,EAAG,OAAO,CAACJ,EAAIoC,GAAG,MAAMpC,EAAImG,GAAGnG,EAAI2J,KAAK8W,SAAS,WAAWzgB,EAAI+B,aAAa3B,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIwY,SAAS,CAACpY,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,qBAAqBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,cAAchC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IACnoH,GAAkB,G,wBCmFtB,IACEzD,KAAM,uBACNgG,MAAO,CAAC,OAAQ,QAEhB,OACE,MAAO,CACLoc,cAAe,KAInBxb,QAAS,CACPsT,OAAQ,WACNvY,KAAKwY,MAAM,SACXxC,EAAOrI,aAAa3N,KAAK0J,KAAK9I,KAGhCgU,KAAM,WACJ5U,KAAKwY,MAAM,SACXxC,EAAOhH,YAAY,CAAzB,wBAGI2Q,WAAY,WACc,YAApB3f,KAAKsQ,WACPtQ,KAAKkF,QAAQnI,KAAK,CAA1B,uCACA,8BACQiD,KAAKkF,QAAQnI,KAAK,CAA1B,yCAEQiD,KAAKkF,QAAQnI,KAAK,CAA1B,4CAII6iB,kBAAmB,WACjB5f,KAAKkF,QAAQnI,KAAK,CAAxB,oDAGIgjB,WAAY,WACV/f,KAAKkF,QAAQnI,KAAK,CAAxB,+CAGIqjB,oBAAqB,WACnBpgB,KAAKwY,MAAM,SACXxY,KAAKkF,QAAQnI,KAAK,CAAxB,mEAGIsjB,mBAAoB,WAClBrgB,KAAKwY,MAAM,SACXxY,KAAKkF,QAAQnI,KAAK,CAAxB,8DAIEiJ,MAAO,CACL,OACE,GAAIhG,KAAK0J,MAAgC,YAAxB1J,KAAK0J,KAAKpD,UAAyB,CAClD,MAAMoa,EAAa,IAAI,GAA/B,EACQA,EAAWC,eAAe3gB,KAAK8E,OAAOC,MAAMe,QAAQ2X,cACpDiD,EAAWE,SAAS5gB,KAAK0J,KAAK9E,KAAK/E,MAAMG,KAAK0J,KAAK9E,KAAKic,YAAY,KAAO,IAAI1S,KAAK,IAClFnO,KAAKygB,cAAgBjU,SAGvBxM,KAAKygB,cAAgB,MC/IiU,MCO1V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI1gB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,sBAAsBhC,EAAG,OAAO,CAACE,YAAY,uBAAuBmB,GAAG,CAAC,OAAS,SAASC,GAAgC,OAAxBA,EAAOY,iBAAwBtC,EAAI6U,KAAKxX,MAAM,KAAMsb,cAAc,CAACvY,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsC,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAO,IAAEuB,WAAW,QAAQuX,IAAI,YAAYxY,YAAY,sBAAsBc,MAAM,CAAC,KAAO,OAAO,YAAc,uBAAuB,SAAWpB,EAAI8G,SAASiS,SAAS,CAAC,MAAS/Y,EAAO,KAAGyB,GAAG,CAAC,MAAQ,SAASC,GAAWA,EAAOsX,OAAOC,YAAqBjZ,EAAIoS,IAAI1Q,EAAOsX,OAAOja,WAAUqB,EAAG,OAAO,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,0BAA2BN,EAAW,QAAEI,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,kCAAkC,CAACF,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,kBAAkBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,qBAAqBhC,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,mCAAmCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,YAAY,CAACrY,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,qBAAqBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,cAAchC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAI+gB,aAAa,CAAC3gB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,2EAA2EmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IAClzE,GAAkB,GCgDtB,IACEzD,KAAM,0BACNgG,MAAO,CAAC,QAER,OACE,MAAO,CACL8N,IAAK,GACLtL,SAAS,IAIb5B,QAAS,CACP6b,WAAY,WACV9gB,KAAK6G,SAAU,EACfmP,EAAOhI,UAAUhO,KAAKmS,KAAKhE,KAAK,KAC9BnO,KAAKwY,MAAM,SACXxY,KAAKmS,IAAM,KACnB,WACQnS,KAAK6G,SAAU,KAInB+N,KAAM,WACJ5U,KAAK6G,SAAU,EACfmP,EAAOtH,gBAAgB1O,KAAKmS,KAAK,GAAOhE,KAAK,KAC3CnO,KAAKwY,MAAM,SACXxY,KAAKmS,IAAM,KACnB,WACQnS,KAAK6G,SAAU,MAKrBb,MAAO,CACL,OACMhG,KAAKmZ,OACPnZ,KAAK6G,SAAU,EAGfwF,WAAW,KACTrM,KAAKoZ,MAAM2H,UAAUzH,SAC/B,QC1FiW,MCO7V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIvZ,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,8BAA8BhC,EAAG,OAAO,CAACE,YAAY,uBAAuBmB,GAAG,CAAC,OAAS,SAASC,GAAgC,OAAxBA,EAAOY,iBAAwBtC,EAAIihB,KAAK5jB,MAAM,KAAMsb,cAAc,CAACvY,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsC,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAiB,cAAEuB,WAAW,kBAAkBuX,IAAI,sBAAsBxY,YAAY,sBAAsBc,MAAM,CAAC,KAAO,OAAO,YAAc,gBAAgB,SAAWpB,EAAI8G,SAASiS,SAAS,CAAC,MAAS/Y,EAAiB,eAAGyB,GAAG,CAAC,MAAQ,SAASC,GAAWA,EAAOsX,OAAOC,YAAqBjZ,EAAIkhB,cAAcxf,EAAOsX,OAAOja,WAAUqB,EAAG,OAAO,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,iCAAkCN,EAAW,QAAEI,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,kCAAkC,CAACF,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,kBAAkBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,oBAAoBhC,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,mCAAmCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,YAAY,CAACrY,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,qBAAqBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,cAAchC,EAAG,IAAI,CAACE,YAAY,2EAA2EmB,GAAG,CAAC,MAAQzB,EAAIihB,OAAO,CAAC7gB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,2BAA2BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IAC7oE,GAAkB,GC6CtB,IACEzD,KAAM,0BACNgG,MAAO,CAAC,QAER,OACE,MAAO,CACL4c,cAAe,GACfpa,SAAS,IAIb5B,QAAS,CACP+b,KAAM,WACAhhB,KAAKihB,cAAcxkB,OAAS,IAIhCuD,KAAK6G,SAAU,EACfmP,EAAOxH,oBAAoBxO,KAAKihB,eAAe9S,KAAK,KAClDnO,KAAKwY,MAAM,SACXxY,KAAKihB,cAAgB,KAC7B,WACQjhB,KAAK6G,SAAU,OAKrBb,MAAO,CACL,OACMhG,KAAKmZ,OACPnZ,KAAK6G,SAAU,EAGfwF,WAAW,KACTrM,KAAKoZ,MAAM8H,oBAAoB5H,SACzC,QCjFiW,MCO7V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,gCCwDf,IACEjb,KAAM,YACNiH,WAAY,CAAd,yIAEE,OACE,MAAO,CACL2Y,WAAW,EAEXQ,oBAAoB,EACpBE,gBAAgB,EAChBC,qBAAqB,EACrBF,cAAe,KAInBha,SAAU,CACR,QACE,OAAO1E,KAAK8E,OAAOC,MAAMU,QAE3B,wBACE,OAAOzF,KAAK8E,OAAOC,MAAMW,OAAOyb,kCAAoCnhB,KAAK8E,OAAOC,MAAMW,OAAO0b,4BAE/F,QACE,OAAOphB,KAAK8E,OAAOC,MAAMyD,OAE3B0V,YAAa,CACX,MAAN,sCACM,IAAN,MAEI,mBACE,MAAMmD,EAAarhB,KAAK8E,OAAOS,QAAQY,YACvC,YAAsByD,IAAfyX,QAAoDzX,IAAxByX,EAAWhT,UAA0B,EAAIrO,KAAK8E,OAAOS,QAAQY,YAAYkI,UAE9G,uBACE,OAAOrO,KAAK8E,OAAOC,MAAMyE,uBAI7BvE,QAAS,CACPyI,YAAa,WACXsI,EAAOtI,eAGTqQ,uBAAwB,SAAUjd,GAChCd,KAAK8E,OAAOE,OAAO,GAAzB,4BAGIuT,OAAQ,SAAU7O,GAChBsM,EAAOrI,aAAajE,EAAK9I,KAG3Bwd,UAAW,SAAUtd,GACnB,MAAMwgB,EAAethB,KAAKwJ,qBAAoC1I,EAAEygB,SAAWvhB,KAAKue,iBAA/Bzd,EAAEygB,SAC7C7X,EAAO1J,KAAKke,YAAYoD,GACxBvT,EAAcrE,EAAK2E,UAAYvN,EAAE0gB,SAAW1gB,EAAEygB,UAChDxT,IAAgBuT,GAClBtL,EAAOlI,WAAWpE,EAAK9I,GAAImN,IAI/ByQ,YAAa,SAAU9U,GACrB1J,KAAK0e,cAAgBhV,EACrB1J,KAAKye,oBAAqB,GAG5BT,uBAAwB,SAAUtU,GAChC1J,KAAK2e,gBAAiB,GAGxBR,YAAa,SAAUzU,GACjB1J,KAAKke,YAAYzhB,OAAS,IAC5BuD,KAAK4e,qBAAsB,MCjJgT,MCO/U,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI7e,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAAEJ,EAAIoG,YAAYvF,GAAK,EAAGT,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,MAAM,CAACE,YAAY,kBAAkB,CAACF,EAAG,gBAAgB,CAACE,YAAY,+BAA+Bc,MAAM,CAAC,YAAcpB,EAAIoG,YAAYsb,YAAY,OAAS1hB,EAAIoG,YAAYE,OAAO,MAAQtG,EAAIoG,YAAYI,OAAO/E,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIye,YAAYze,EAAIoG,kBAAkB,GAAGhG,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACF,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,IAAI,CAACE,YAAY,qDAAqD,CAACF,EAAG,eAAe,CAACE,YAAY,4BAA4Bc,MAAM,CAAC,IAAM,IAAI,IAAMpB,EAAIgF,MAAMuD,eAAe,MAAQvI,EAAIwI,iBAAiB,SAA+B,SAApBxI,EAAIgF,MAAMA,MAAiB,KAAO,QAAQvD,GAAG,CAAC,OAASzB,EAAImX,SAAS,GAAG/W,EAAG,IAAI,CAACE,YAAY,WAAW,CAACF,EAAG,OAAO,CAACJ,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,WAAPngB,CAAmBA,EAAIwI,mBAAmB,MAAMxI,EAAImG,GAAGnG,EAAImgB,GAAG,WAAPngB,CAAmBA,EAAIoG,YAAYga,qBAAqBhgB,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACF,EAAG,MAAM,CAACE,YAAY,iDAAiD,CAACF,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAIoG,YAAYC,OAAO,OAAOjG,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAIoG,YAAYE,QAAQ,OAAQtG,EAAY,SAAEI,EAAG,KAAK,CAACE,YAAY,oDAAoD,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAI4R,UAAU,OAAO5R,EAAI+B,KAAK3B,EAAG,KAAK,CAACE,YAAY,iBAAiB,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAIoG,YAAYI,OAAO,aAAapG,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACN,EAAImC,GAAG,KAAK/B,EAAG,0BAA0B,CAACgB,MAAM,CAAC,KAAOpB,EAAI0e,mBAAmB,KAAO1e,EAAI2e,eAAeld,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0e,oBAAqB,OAAW,IACzuD,GAAkB,CAAC,WAAa,IAAI1e,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,2CAA2CC,YAAY,CAAC,iBAAiB,WAAW,CAACH,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACF,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,gCAAgChC,EAAG,IAAI,CAACJ,EAAIoC,GAAG,sDCD/V,I,UAAS,WAAa,IAAIpC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACA,EAAG,MAAM,CAACiB,WAAW,CAAC,CAAC/C,KAAK,WAAWgD,QAAQ,eAAejC,IAAIW,EAAI2hB,sBAAsBvgB,MAAM,CAAC,WAAWpB,EAAI2hB,sBAAsB,WAAW3hB,EAAI4hB,SAASngB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,iBACvT,GAAkB,G,oBCItB,MAAMoJ,GACJ9hB,OAAQ7D,GACN,MAAM4lB,EAAM,eAAiB5lB,EAAK6lB,MAAQ,aAAe7lB,EAAK8lB,OAAS,qDAAuD9lB,EAAK6lB,MAAQ,IAAM7lB,EAAK8lB,OAA1I,2FAIS9lB,EAAK+lB,UAJd,uBAKgB/lB,EAAKgmB,WALrB,qBAMchmB,EAAKimB,SANnB,yBAOgBjmB,EAAKkmB,WAPrB,kFAYsClmB,EAAKmmB,gBAZ3C,0EAcsDnmB,EAAKomB,QAd3D,0BAmBZ,MAAO,oCAAsCC,mBAAmBT,IAIrDD,U,wBCff,IACEvjB,KAAM,eACNgG,MAAO,CAAC,SAAU,QAAS,cAAe,WAAY,aAEtD,OACE,MAAO,CACLwd,IAAK,IAAI,GACTC,MAAO,IACPC,OAAQ,IACRQ,YAAa,aACbC,UAAW,IACXC,YAAa,MAIjB/d,SAAU,CACRgd,sBAAuB,WACrB,OAAI1hB,KAAK4T,SAAW,GAAK5T,KAAK6T,UAAY,EACjCmC,EAAOtC,+BAA+B1T,KAAKyhB,YAAazhB,KAAK4T,SAAU5T,KAAK6T,WAE9EmC,EAAOtC,+BAA+B1T,KAAKyhB,cAGpD,WACE,OAAOzhB,KAAKqG,OAAS,MAAQrG,KAAKuG,OAGpC,UACE,OAAIvG,KAAKuG,MACAvG,KAAKuG,MAAMmc,UAAU,EAAG,GAE7B1iB,KAAKqG,OACArG,KAAKqG,OAAOqc,UAAU,EAAG,GAE3B,IAGT,mBACE,OAAO,KAAb,gBAGI,sBAEE,MAAMC,EAAM3iB,KAAK4iB,iBAAiBC,QAAQ,IAAK,IACzClkB,EAAImkB,SAASH,EAAII,OAAO,EAAG,GAAI,IAC/BC,EAAIF,SAASH,EAAII,OAAO,EAAG,GAAI,IAC/BE,EAAIH,SAASH,EAAII,OAAO,EAAG,GAAI,IAE/BG,EAAO,CACnB,OACA,OACA,QACA,uBAEM,OAAOA,EAAO,IAGhB,aACE,OAAOljB,KAAKmjB,oBAAsB,UAAY,WAGhD,iBACE,MAAO,CACLrB,MAAO9hB,KAAK8hB,MACZC,OAAQ/hB,KAAK+hB,OACbC,UAAWhiB,KAAKojB,WAChBhB,gBAAiBpiB,KAAK4iB,iBACtBP,QAASriB,KAAKqiB,QACdJ,WAAYjiB,KAAKuiB,YACjBL,SAAUliB,KAAKwiB,UACfL,WAAYniB,KAAKyiB,cAIrB,UACE,OAAOziB,KAAK6hB,IAAI/hB,OAAOE,KAAKqjB,mBC1FoT,MCOlV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCkDf,IACEhlB,KAAM,iBACNiH,WAAY,CAAd,0DAEE,OACE,MAAO,CACLiD,iBAAkB,EAClB+a,YAAa,EAEb7E,oBAAoB,EACpBC,cAAe,KAInB,UACE1e,KAAKuI,iBAAmBvI,KAAK+E,MAAMwD,iBACnCyN,EAAOvH,gBAAgBN,KAAK,EAAhC,WACMnO,KAAK8E,OAAOE,OAAO,EAAzB,GAC+B,SAArBhF,KAAK+E,MAAMA,QACb/E,KAAKsjB,YAAc3jB,OAAO4jB,YAAYvjB,KAAKwjB,KAAM,SAKvD,YACMxjB,KAAKsjB,YAAc,IACrB3jB,OAAO4d,aAAavd,KAAKsjB,aACzBtjB,KAAKsjB,YAAc,IAIvB5e,SAAU,CACR,QACE,OAAO1E,KAAK8E,OAAOC,MAAMU,QAG3B,cACE,OAAOzF,KAAK8E,OAAOS,QAAQY,aAG7B,4CACE,OAAOnG,KAAK8E,OAAOS,QAAQ2E,2CAG7B,0CACE,OAAOlK,KAAK8E,OAAOS,QAAQ4E,yCAG7B,WACE,OAAInK,KAAKkK,6CACFlK,KAAKmK,yCAClB,wBACA,2DACA,WACA,4EACiBnK,KAAKmG,YAAYwL,SAGrB,OAIX1M,QAAS,CACPue,KAAM,WACJxjB,KAAKuI,kBAAoB,KAG3B2O,KAAM,SAAUnJ,GACdiI,EAAOhG,mBAAmBjC,GAAa0V,MAAM,KAC3CzjB,KAAKuI,iBAAmBvI,KAAK+E,MAAMwD,oBAIvCiW,YAAa,SAAU9U,GACrB1J,KAAK0e,cAAgBhV,EACrB1J,KAAKye,oBAAqB,IAI9BzY,MAAO,CACL,QACMhG,KAAKsjB,YAAc,IACrB3jB,OAAO4d,aAAavd,KAAKsjB,aACzBtjB,KAAKsjB,YAAc,GAErBtjB,KAAKuI,iBAAmBvI,KAAK+E,MAAMwD,iBACV,SAArBvI,KAAK+E,MAAMA,QACb/E,KAAKsjB,YAAc3jB,OAAO4jB,YAAYvjB,KAAKwjB,KAAM,SC3J+R,MCOpV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIzjB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,cAAcA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,oBAAoBhC,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,cAAchC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI2jB,eAAehb,UAAU,GAAGvI,EAAG,WAAW,CAACqZ,KAAK,UAAU,CAACrZ,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAI4jB,YAAY,qBAAqB,CAAC5jB,EAAIoC,GAAG,sBAAsB,GAAGhC,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,qBAAqBhC,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,cAAchC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI6jB,gBAAgBlb,UAAU,GAAGvI,EAAG,WAAW,CAACqZ,KAAK,UAAU,CAACrZ,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAI4jB,YAAY,sBAAsB,CAAC5jB,EAAIoC,GAAG,sBAAsB,IAAI,IACjrC,GAAkB,G,UCAf,MAAM0hB,GAA2B,SAAUC,GAChD,MAAO,CACLC,iBAAkBzf,EAAI+W,EAAMC,GAC1BwI,EAAWtO,KAAKlR,GAAI6J,KAAM3B,IACxB8O,EAAKU,GAAM8H,EAAWE,IAAIhI,EAAIxP,OAGlCyX,kBAAmB3f,EAAI+W,EAAMC,GAC3B,MAAMU,EAAKhc,KACX8jB,EAAWtO,KAAKlR,GAAI6J,KAAM3B,IACxBsX,EAAWE,IAAIhI,EAAIxP,GACnB8O,SCZR,IAAI,GAAS,WAAa,IAAIvb,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACE,YAAY,2BAA2B,CAACF,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACF,EAAG,KAAK,CAACA,EAAG,cAAc,CAACgB,MAAM,CAAC,IAAM,KAAK,GAAK,gBAAgB,eAAe,cAAc,CAAChB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,iBAAiB,CAACF,EAAG,IAAI,CAACE,YAAY,kBAAkBF,EAAG,OAAO,GAAG,CAACJ,EAAIoC,GAAG,gBAAgBhC,EAAG,cAAc,CAACgB,MAAM,CAAC,IAAM,KAAK,GAAK,iBAAiB,eAAe,cAAc,CAAChB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,iBAAiB,CAACF,EAAG,IAAI,CAACE,YAAY,qBAAqBF,EAAG,OAAO,GAAG,CAACJ,EAAIoC,GAAG,iBAAiBhC,EAAG,cAAc,CAACgB,MAAM,CAAC,IAAM,KAAK,GAAK,gBAAgB,eAAe,cAAc,CAAChB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,iBAAiB,CAACF,EAAG,IAAI,CAACE,YAAY,oBAAoBF,EAAG,OAAO,GAAG,CAACJ,EAAIoC,GAAG,gBAAgBhC,EAAG,cAAc,CAACgB,MAAM,CAAC,IAAM,KAAK,GAAK,gBAAgB,eAAe,cAAc,CAAChB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,iBAAiB,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBF,EAAG,OAAO,GAAG,CAACJ,EAAIoC,GAAG,gBAAgBhC,EAAG,cAAc,CAACgB,MAAM,CAAC,IAAM,KAAK,GAAK,mBAAmB,eAAe,cAAc,CAAChB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,iBAAiB,CAACF,EAAG,IAAI,CAACE,YAAY,qCAAqCF,EAAG,OAAO,GAAG,CAACJ,EAAIoC,GAAG,mBAAoBpC,EAAmB,gBAAEI,EAAG,cAAc,CAACgB,MAAM,CAAC,IAAM,KAAK,GAAK,iBAAiB,eAAe,cAAc,CAAChB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,iBAAiB,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBF,EAAG,OAAO,GAAG,CAACJ,EAAIoC,GAAG,iBAAiBpC,EAAI+B,MAAM,cAC7oD,GAAkB,GCmDtB,IACEzD,KAAM,YAENqG,SAAU,CACR,kBACE,OAAO1E,KAAK8E,OAAOC,MAAMe,QAAQC,sBCzD4S,MCO/U,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIhG,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAAEJ,EAAc,WAAEI,EAAG,MAAMJ,EAAI4G,GAAI5G,EAAI6H,OAAgB,WAAE,SAASsc,GAAK,OAAO/jB,EAAG,MAAM,CAACf,IAAI8kB,EAAI7jB,YAAY,QAAQ,CAACF,EAAG,OAAO,CAACE,YAAY,qDAAqDc,MAAM,CAAC,GAAK,SAAW+iB,IAAM,CAACnkB,EAAIoC,GAAGpC,EAAImG,GAAGge,MAAQnkB,EAAI4G,GAAI5G,EAAI6H,OAAOuc,QAAQD,IAAM,SAAS3d,GAAO,OAAOpG,EAAG,kBAAkB,CAACf,IAAImH,EAAM3F,GAAGO,MAAM,CAAC,MAAQoF,GAAO/E,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAI4f,WAAWpZ,MAAU,CAAExG,EAAsB,mBAAEI,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,8CAA8C,CAACF,EAAG,gBAAgB,CAACgB,MAAM,CAAC,YAAcoF,EAAMkb,YAAY,OAASlb,EAAMF,OAAO,MAAQE,EAAMlI,KAAK,SAAW,GAAG,UAAY,OAAO,KAAK0B,EAAI+B,KAAK3B,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIye,YAAYjY,MAAU,CAACpG,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,OAAM,MAAK,GAAGF,EAAG,MAAMJ,EAAI4G,GAAI5G,EAAe,aAAE,SAASwG,GAAO,OAAOpG,EAAG,kBAAkB,CAACf,IAAImH,EAAM3F,GAAGO,MAAM,CAAC,MAAQoF,GAAO/E,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAI4f,WAAWpZ,MAAU,CAAExG,EAAsB,mBAAEI,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,8CAA8C,CAACF,EAAG,gBAAgB,CAACgB,MAAM,CAAC,YAAcoF,EAAMkb,YAAY,OAASlb,EAAMF,OAAO,MAAQE,EAAMlI,KAAK,SAAW,GAAG,UAAY,OAAO,KAAK0B,EAAI+B,KAAK3B,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIye,YAAYjY,MAAU,CAACpG,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAK,GAAGF,EAAG,qBAAqB,CAACgB,MAAM,CAAC,KAAOpB,EAAI0e,mBAAmB,MAAQ1e,EAAIqkB,eAAe,WAAarkB,EAAIuQ,YAAY9O,GAAG,CAAC,iBAAiB,SAASC,GAAQ,OAAO1B,EAAIskB,8BAA8B,qBAAqB,SAAS5iB,GAAQ,OAAO1B,EAAIukB,sBAAsB,MAAQ,SAAS7iB,GAAQ1B,EAAI0e,oBAAqB,MAAUte,EAAG,eAAe,CAACgB,MAAM,CAAC,KAAOpB,EAAIwkB,0BAA0B,MAAQ,iBAAiB,cAAgB,UAAU/iB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIwkB,2BAA4B,GAAO,OAASxkB,EAAIykB,iBAAiB,CAACrkB,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,IAAI,CAACJ,EAAIoC,GAAG,wDAAwDhC,EAAG,IAAI,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,4CAA4ChC,EAAG,IAAI,CAACJ,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI0kB,uBAAuBpmB,SAAS0B,EAAIoC,GAAG,WAAW,IAAI,IACl8E,GAAkB,GCDlB,GAAS,SAAUlC,EAAGF,GAAM,IAAII,EAAGJ,EAAII,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,QAAQc,MAAM,CAAC,GAAK,SAAWpB,EAAIsE,MAAMkC,MAAMme,UAAUC,OAAO,GAAGC,gBAAgB,CAAE7kB,EAAI8e,OAAO,WAAY1e,EAAG,MAAM,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAI8kB,UAAUC,QAAQ,CAAC/kB,EAAIQ,GAAG,YAAY,GAAGR,EAAI+B,KAAK3B,EAAG,MAAM,CAACE,YAAY,yCAAyCmB,GAAG,CAAC,MAAQzB,EAAI8kB,UAAUC,QAAQ,CAAC3kB,EAAG,MAAM,CAACG,YAAY,CAAC,aAAa,WAAW,CAACH,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsE,MAAMkC,MAAMlI,SAAS8B,EAAG,KAAK,CAACE,YAAY,+BAA+B,CAACF,EAAG,IAAI,CAACJ,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsE,MAAMkC,MAAMF,aAActG,EAAIsE,MAAMkC,MAAMwe,eAAgD,UAA/BhlB,EAAIsE,MAAMkC,MAAM+J,WAAwBnQ,EAAG,KAAK,CAACE,YAAY,sDAAsD,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAImgB,GAAG,OAAPngB,CAAeA,EAAIsE,MAAMkC,MAAMwe,cAAc,MAAM,OAAOhlB,EAAI+B,SAAS3B,EAAG,MAAM,CAACE,YAAY,cAAcC,YAAY,CAAC,cAAc,WAAW,CAACP,EAAIQ,GAAG,YAAY,MACx7B,GAAkB,GCuBtB,IACElC,KAAM,gBACNgG,MAAO,CAAC,QAAS,eC1BoU,MCOnV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAItE,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,gBAAgB,CAACE,YAAY,qDAAqDc,MAAM,CAAC,YAAcpB,EAAIwG,MAAMkb,YAAY,OAAS1hB,EAAIwG,MAAMF,OAAO,MAAQtG,EAAIwG,MAAMlI,QAAQ8B,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAI4f,aAAa,CAAC5f,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAMlI,WAAwC,YAA5B0B,EAAIilB,oBAAmC7kB,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,IAAI,CAACE,YAAY,kBAAkBmB,GAAG,CAAC,MAAQzB,EAAIklB,cAAc,CAACllB,EAAIoC,GAAG,oBAAoBhC,EAAG,IAAI,CAACE,YAAY,kBAAkBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,qBAAqB,CAACzY,EAAIoC,GAAG,sBAAsBpC,EAAI+B,KAAK3B,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAAEN,EAAIwG,MAAY,OAAEpG,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,IAAI,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAImlB,cAAc,CAACnlB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAMF,aAAatG,EAAI+B,KAAM/B,EAAIwG,MAAmB,cAAEpG,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,OAAPngB,CAAeA,EAAIwG,MAAMwe,cAAc,WAAYhlB,EAAIwG,MAAMuZ,KAAO,EAAG3f,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,UAAUhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAMuZ,WAAW/f,EAAI+B,KAAK3B,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,YAAYhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAM4e,kBAAkBhlB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,YAAYhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,WAAPngB,CAAmBA,EAAIwG,MAAM4Z,iBAAiBhgB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,UAAUhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAM+J,YAAY,MAAMvQ,EAAImG,GAAGnG,EAAIwG,MAAMD,gBAAgBnG,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,cAAchC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,OAAPngB,CAAeA,EAAIwG,MAAM6e,WAAW,iBAAiB,GAAGjlB,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIiO,YAAY,CAAC7N,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIqO,iBAAiB,CAACjO,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,gBAAgBhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IACvnG,GAAkB,GCyEtB,IACEzD,KAAM,mBACNiH,WAAY,CAAd,iBACEjB,MAAO,CAAC,OAAQ,QAAS,aAAc,cAEvC,OACE,MAAO,CACLghB,iBAAiB,IAIrB3gB,SAAU,CACR+c,YAAa,WACX,OAAOzL,EAAOtC,+BAA+B1T,KAAKuG,MAAMkb,cAG1DuD,oBAAqB,WACnB,OAAOhlB,KAAKsQ,WAAatQ,KAAKsQ,WAAatQ,KAAKuG,MAAM+J,aAI1DrL,QAAS,CACP2P,KAAM,WACJ5U,KAAKwY,MAAM,SACXxC,EAAOtH,gBAAgB1O,KAAKuG,MAAM0H,KAAK,IAGzCD,UAAW,WACThO,KAAKwY,MAAM,SACXxC,EAAOhI,UAAUhO,KAAKuG,MAAM0H,MAG9BG,eAAgB,WACdpO,KAAKwY,MAAM,SACXxC,EAAO5H,eAAepO,KAAKuG,MAAM0H,MAGnC0R,WAAY,WACuB,YAA7B3f,KAAKglB,oBACPhlB,KAAKkF,QAAQnI,KAAK,CAA1B,kCACA,uCACQiD,KAAKkF,QAAQnI,KAAK,CAA1B,oCAEQiD,KAAKkF,QAAQnI,KAAK,CAA1B,uCAIImoB,YAAa,WACsB,YAA7BllB,KAAKglB,sBAEf,uCACQhlB,KAAKkF,QAAQnI,KAAK,CAA1B,mDAEQiD,KAAKkF,QAAQnI,KAAK,CAA1B,gDAIIkoB,YAAa,WACXjP,EAAO/E,2BAA2BjR,KAAKuG,MAAM3F,GAAI,CAAvD,wCACQZ,KAAKwY,MAAM,sBACXxY,KAAKwY,MAAM,YAIf8M,eAAgB,WACdtlB,KAAKqlB,iBAAkB,GAGzBE,cAAe,WACbvlB,KAAKqlB,iBAAkB,KC/I6T,MCOtV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,kBCjBA,MAAMG,GACnBC,YAAa/c,EAAOuB,EAAU,CAAEsB,aAAa,EAAOC,aAAa,EAAOC,KAAM,OAAQia,OAAO,IAC3F1lB,KAAK0I,MAAQA,EACb1I,KAAKiK,QAAUA,EACfjK,KAAKmkB,QAAU,GACfnkB,KAAK2lB,kBAAoB,GACzB3lB,KAAK4lB,UAAY,GAEjB5lB,KAAK6lB,OAGPA,OACE7lB,KAAK8lB,8BACL9lB,KAAK+lB,oBACL/lB,KAAKgmB,kBAGPC,cAAe1f,GACb,MAA0B,mBAAtBvG,KAAKiK,QAAQwB,KACRlF,EAAM6e,WAAW1C,UAAU,EAAG,GACN,4BAAtB1iB,KAAKiK,QAAQwB,KACfzL,KAAKkmB,4BAA4B3f,EAAM6e,YACf,sBAAtBplB,KAAKiK,QAAQwB,MAES,iBAAtBzL,KAAKiK,QAAQwB,KADflF,EAAMwe,cAAgBxe,EAAMwe,cAAcrC,UAAU,EAAG,GAAK,OAI9Dnc,EAAMme,UAAUC,OAAO,GAAGC,cAGnCsB,4BAA6BC,GAC3B,IAAKA,EACH,MAAO,OAGT,MAAMC,GAAO,IAAI/Q,MAAOgR,UAAY,IAAIhR,KAAK8Q,GAAeE,UAE5D,OAAID,EAAO,MACF,QACEA,EAAO,OACT,YACEA,EAAO,OACT,aAEFD,EAAczD,UAAU,EAAG,GAGpC4D,eAAgB/f,GACd,QAAIvG,KAAKiK,QAAQsB,aAAehF,EAAM4e,aAAe,MAGjDnlB,KAAKiK,QAAQuB,aAAmC,YAApBjF,EAAMD,WAMxC0f,kBACEhmB,KAAK4lB,UAAY,IAAI,IAAIW,IAAIvmB,KAAK2lB,kBAC/BllB,IAAI8F,GAASvG,KAAKimB,cAAc1f,MAGrCuf,8BACE,IAAIU,EAAexmB,KAAK0I,OACpB1I,KAAKiK,QAAQsB,aAAevL,KAAKiK,QAAQuB,aAAexL,KAAKiK,QAAQwc,aACvED,EAAeA,EAAa1V,OAAOvK,GAASvG,KAAKsmB,eAAe/f,KAExC,mBAAtBvG,KAAKiK,QAAQwB,MAAmD,4BAAtBzL,KAAKiK,QAAQwB,KACzD+a,EAAe,IAAIA,GAAc/a,KAAK,CAAC0M,EAAG8K,IAAMA,EAAEmC,WAAWsB,cAAcvO,EAAEiN,aAC9C,sBAAtBplB,KAAKiK,QAAQwB,KACtB+a,EAAe,IAAIA,GAAc/a,KAAK,CAAC0M,EAAG8K,IACnC9K,EAAE4M,cAGF9B,EAAE8B,cAGA9B,EAAE8B,cAAc2B,cAAcvO,EAAE4M,gBAF7B,EAHD,GAOoB,iBAAtB/kB,KAAKiK,QAAQwB,OACtB+a,EAAe,IAAIA,GAAc/a,KAAK,CAAC0M,EAAG8K,IACnC9K,EAAE4M,cAGF9B,EAAE8B,cAGA5M,EAAE4M,cAAc2B,cAAczD,EAAE8B,eAF9B,GAHC,IAQd/kB,KAAK2lB,kBAAoBa,EAG3BT,oBACO/lB,KAAKiK,QAAQyb,QAChB1lB,KAAKmkB,QAAU,IAEjBnkB,KAAKmkB,QAAUnkB,KAAK2lB,kBAAkBgB,OAAO,CAAChoB,EAAG4H,KAC/C,MAAM2d,EAAMlkB,KAAKimB,cAAc1f,GAE/B,OADA5H,EAAEulB,GAAO,IAAIvlB,EAAEulB,IAAQ,GAAI3d,GACpB5H,GACN,KCxBP,QACEN,KAAM,aACNiH,WAAY,CAAd,qEAEEjB,MAAO,CAAC,SAAU,cAElB,OACE,MAAO,CACLoa,oBAAoB,EACpB2F,eAAgB,GAEhBG,2BAA2B,EAC3BE,uBAAwB,KAI5B/f,SAAU,CACR,qBACE,OAAO1E,KAAK8E,OAAOS,QAAQC,gBAAgB,eAAgB,qCAAqC1G,OAGlGkmB,oBAAqB,WACnB,OAAOhlB,KAAKsQ,WAAatQ,KAAKsQ,WAAatQ,KAAKokB,eAAe9T,YAGjEsW,YAAa,WACX,OAAI/M,MAAMI,QAAQja,KAAK4H,QACd5H,KAAK4H,OAEP5H,KAAK4H,OAAO+d,mBAGrBkB,WAAY,WACV,OAAO,KAAb,kDAIE5hB,QAAS,CACP0a,WAAY,SAAUpZ,GACpBvG,KAAKokB,eAAiB7d,EACW,YAA7BvG,KAAKglB,oBACPhlB,KAAKkF,QAAQnI,KAAK,CAA1B,yBACA,uCACQiD,KAAKkF,QAAQnI,KAAK,CAA1B,2BAEQiD,KAAKkF,QAAQnI,KAAK,CAA1B,8BAIIyhB,YAAa,SAAUjY,GACrBvG,KAAKokB,eAAiB7d,EACtBvG,KAAKye,oBAAqB,GAG5B4F,2BAA4B,WAC1BrO,EAAOnF,qBAAqB7Q,KAAKokB,eAAexjB,GAAI,CAA1D,4BACQoV,EAAOpD,wBAAwB3W,EAAKyM,MAAM,GAAG9H,IAAIuN,KAAK,EAA9D,WACU,MAAM2Y,EAAe7qB,EAAKyM,MAAMoI,OAAOiW,GAAkB,QAAZA,EAAG7a,MACpB,IAAxB4a,EAAarqB,QAKjBuD,KAAKykB,uBAAyBqC,EAAa,GAC3C9mB,KAAKukB,2BAA4B,EACjCvkB,KAAKye,oBAAqB,GANxBze,KAAK8E,OAAOgI,SAAS,mBAAoB,CAArD,qGAWIwX,mBAAoB,WAClBtkB,KAAKwY,MAAM,uBAGbgM,eAAgB,WACdxkB,KAAKukB,2BAA4B,EACjCvO,EAAO5D,wBAAwBpS,KAAKykB,uBAAuB7jB,IAAIuN,KAAK,KAClEnO,KAAKwY,MAAM,wBC3JiU,MCOhV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIzY,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACJ,EAAI4G,GAAI5G,EAAU,QAAE,SAASinB,EAAM9b,GAAO,OAAO/K,EAAG,kBAAkB,CAACf,IAAI4nB,EAAMpmB,GAAGO,MAAM,CAAC,MAAQ6lB,GAAOxlB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIknB,WAAW/b,EAAO8b,MAAU,CAAC7mB,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIye,YAAYwI,MAAU,CAAC7mB,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAKF,EAAG,qBAAqB,CAACgB,MAAM,CAAC,KAAOpB,EAAI0e,mBAAmB,MAAQ1e,EAAImnB,gBAAgB1lB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0e,oBAAqB,OAAW,IACxoB,GAAkB,GCDlB,GAAS,SAAUxe,EAAGF,GAAM,IAAII,EAAGJ,EAAII,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,QAAQ0B,MAAM,CAAE,gBAAiBhC,EAAIonB,QAAQ1L,UAAWta,MAAM,CAAC,GAAK,SAAWpB,EAAIsE,MAAM2iB,MAAMI,WAAWzC,OAAO,GAAGC,gBAAgB,CAAE7kB,EAAIonB,QAAY,KAAEhnB,EAAG,SAAS,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAI8kB,UAAUC,QAAQ,CAAC/kB,EAAIQ,GAAG,SAAS,GAAGR,EAAI+B,KAAK3B,EAAG,MAAM,CAACE,YAAY,yCAAyCmB,GAAG,CAAC,MAAQzB,EAAI8kB,UAAUC,QAAQ,CAAC3kB,EAAG,KAAK,CAACE,YAAY,aAAa0B,MAAM,CAAE,gBAAgD,YAA/BhC,EAAIsE,MAAM2iB,MAAM1W,YAA4BvQ,EAAIsE,MAAM2iB,MAAMK,WAAa,IAAK,CAACtnB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsE,MAAM2iB,MAAM5gB,UAAUjG,EAAG,KAAK,CAACE,YAAY,+BAA+B,CAACF,EAAG,IAAI,CAACJ,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsE,MAAM2iB,MAAM3gB,aAAalG,EAAG,KAAK,CAACE,YAAY,+BAA+B,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsE,MAAM2iB,MAAMzgB,UAAUxG,EAAIQ,GAAG,aAAa,GAAGJ,EAAG,MAAM,CAACE,YAAY,eAAe,CAACN,EAAIQ,GAAG,YAAY,MAC33B,GAAkB,GCiBtB,IACElC,KAAM,gBACNgG,MAAO,CAAC,UCpB6U,MCOnV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAItE,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAIinB,MAAM5gB,OAAO,OAAOjG,EAAG,IAAI,CAACE,YAAY,YAAY,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAIinB,MAAM3gB,QAAQ,OAAiC,YAAzBtG,EAAIinB,MAAM1W,WAA0BnQ,EAAG,MAAM,CAACE,YAAY,WAAW,CAAEN,EAAIinB,MAAMK,WAAa,EAAGlnB,EAAG,IAAI,CAACE,YAAY,kBAAkBmB,GAAG,CAAC,MAAQzB,EAAIunB,WAAW,CAACvnB,EAAIoC,GAAG,iBAAiBpC,EAAI+B,KAA+B,IAAzB/B,EAAIinB,MAAMK,WAAkBlnB,EAAG,IAAI,CAACE,YAAY,kBAAkBmB,GAAG,CAAC,MAAQzB,EAAIklB,cAAc,CAACllB,EAAIoC,GAAG,oBAAoBpC,EAAI+B,OAAO/B,EAAI+B,KAAK3B,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAI4f,aAAa,CAAC5f,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIinB,MAAMzgB,YAAaxG,EAAIinB,MAAMnH,cAAyC,cAAzB9f,EAAIinB,MAAM1W,WAA4BnQ,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,IAAI,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAImlB,cAAc,CAACnlB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIinB,MAAMnH,mBAAmB9f,EAAI+B,KAAM/B,EAAIinB,MAAc,SAAE7mB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,cAAchC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIinB,MAAMrV,eAAe5R,EAAI+B,KAAM/B,EAAIinB,MAAmB,cAAE7mB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,OAAPngB,CAAeA,EAAIinB,MAAMjC,cAAc,WAAYhlB,EAAIinB,MAAMlH,KAAO,EAAG3f,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,UAAUhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIinB,MAAMlH,WAAW/f,EAAI+B,KAAM/B,EAAIinB,MAAW,MAAE7mB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAIggB,aAAa,CAAChgB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIinB,MAAM3V,YAAYtR,EAAI+B,KAAK3B,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIinB,MAAMhH,cAAc,MAAMjgB,EAAImG,GAAGnG,EAAIinB,MAAM/G,kBAAkB9f,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,YAAYhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,WAAPngB,CAAmBA,EAAIinB,MAAM7G,iBAAiBhgB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,UAAUhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIinB,MAAMpiB,WAAWzE,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,UAAUhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIinB,MAAM1W,YAAY,MAAMvQ,EAAImG,GAAGnG,EAAIinB,MAAM1gB,WAAW,KAA8B,YAAxBvG,EAAIinB,MAAM1gB,UAAyBnG,EAAG,OAAO,CAACE,YAAY,0BAA0B,CAACN,EAAIoC,GAAG,KAAKhC,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQzB,EAAIqgB,sBAAsB,CAACrgB,EAAIoC,GAAG,YAAYpC,EAAIoC,GAAG,MAAMhC,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQzB,EAAIsgB,qBAAqB,CAACtgB,EAAIoC,GAAG,WAAWpC,EAAIoC,GAAG,OAAOpC,EAAI+B,SAAS3B,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,aAAahC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAIinB,MAAM9a,MAAM,KAAMnM,EAAIinB,MAAgB,WAAE7mB,EAAG,OAAO,CAACJ,EAAIoC,GAAG,MAAMpC,EAAImG,GAAGnG,EAAIinB,MAAM1G,YAAY,SAASvgB,EAAI+B,KAAM/B,EAAIinB,MAAc,SAAE7mB,EAAG,OAAO,CAACJ,EAAIoC,GAAG,MAAMpC,EAAImG,GAAGnG,EAAImgB,GAAG,WAAPngB,CAAmBA,EAAIinB,MAAMzG,cAAcxgB,EAAI+B,KAAM/B,EAAIinB,MAAa,QAAE7mB,EAAG,OAAO,CAACJ,EAAIoC,GAAG,MAAMpC,EAAImG,GAAGnG,EAAIinB,MAAMxG,SAAS,WAAWzgB,EAAI+B,SAAS3B,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,cAAchC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,OAAPngB,CAAeA,EAAIinB,MAAM5B,WAAW,cAAcjlB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,YAAYhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGqhB,KAAKC,MAAMznB,EAAIinB,MAAMS,OAAS,KAAK,aAAc1nB,EAAIinB,MAAa,QAAE7mB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,aAAahC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIinB,MAAMU,cAAc3nB,EAAI+B,SAAS3B,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIiO,YAAY,CAAC7N,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIqO,iBAAiB,CAACjO,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,gBAAgBhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIknB,aAAa,CAAC9mB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IAChwJ,GAAkB,GCwGtB,IACEzD,KAAM,mBAENgG,MAAO,CAAC,OAAQ,SAEhB,OACE,MAAO,CACLoc,cAAe,KAInBxb,QAAS,CACPgiB,WAAY,WACVjnB,KAAKwY,MAAM,SACXxC,EAAOtH,gBAAgB1O,KAAKgnB,MAAM/Y,KAAK,IAGzCD,UAAW,WACThO,KAAKwY,MAAM,SACXxC,EAAOhI,UAAUhO,KAAKgnB,MAAM/Y,MAG9BG,eAAgB,WACdpO,KAAKwY,MAAM,SACXxC,EAAO5H,eAAepO,KAAKgnB,MAAM/Y,MAGnC0R,WAAY,WACV3f,KAAKwY,MAAM,SACmB,YAA1BxY,KAAKgnB,MAAM1W,WACbtQ,KAAKkF,QAAQnI,KAAK,CAA1B,wCACA,oCACQiD,KAAKkF,QAAQnI,KAAK,CAA1B,0CAEQiD,KAAKkF,QAAQnI,KAAK,CAA1B,6CAIImoB,YAAa,WACXllB,KAAKwY,MAAM,SACXxY,KAAKkF,QAAQnI,KAAK,CAAxB,qDAGIgjB,WAAY,WACV/f,KAAKkF,QAAQnI,KAAK,CAAxB,gDAGIqjB,oBAAqB,WACnBpgB,KAAKwY,MAAM,SACXxY,KAAKkF,QAAQnI,KAAK,CAAxB,mEAGIsjB,mBAAoB,WAClBrgB,KAAKwY,MAAM,SACXxY,KAAKkF,QAAQnI,KAAK,CAAxB,6DAGIuqB,SAAU,WACRtR,EAAOnD,qBAAqB7S,KAAKgnB,MAAMpmB,GAAI,CAAjD,+BACQZ,KAAKwY,MAAM,sBACXxY,KAAKwY,MAAM,YAIfyM,YAAa,WACXjP,EAAOnD,qBAAqB7S,KAAKgnB,MAAMpmB,GAAI,CAAjD,mCACQZ,KAAKwY,MAAM,sBACXxY,KAAKwY,MAAM,aAKjBxS,MAAO,CACL,QACE,GAAIhG,KAAKgnB,OAAkC,YAAzBhnB,KAAKgnB,MAAM1gB,UAAyB,CACpD,MAAMoa,EAAa,IAAI,GAA/B,EACQA,EAAWC,eAAe3gB,KAAK8E,OAAOC,MAAMe,QAAQ2X,cACpDiD,EAAWE,SAAS5gB,KAAKgnB,MAAMpiB,KAAK/E,MAAMG,KAAKgnB,MAAMpiB,KAAKic,YAAY,KAAO,IAAI1S,KAAK,IACpFnO,KAAKygB,cAAgBjU,SAGvBxM,KAAKygB,cAAgB,MC1L6T,MCOtV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCAf,IACEpiB,KAAM,aACNiH,WAAY,CAAd,sCAEEjB,MAAO,CAAC,SAAU,OAAQ,cAE1B,OACE,MAAO,CACLoa,oBAAoB,EACpByI,eAAgB,KAIpBjiB,QAAS,CACPgiB,WAAY,SAAU5Y,EAAU2Y,GAC1BhnB,KAAK2O,KACPqH,EAAOtH,gBAAgB1O,KAAK2O,MAAM,EAAON,GACjD,gBACQ2H,EAAOjH,uBAAuB/O,KAAKsB,YAAY,EAAO+M,GAEtD2H,EAAOtH,gBAAgBsY,EAAM/Y,KAAK,IAItCuQ,YAAa,SAAUwI,GACrBhnB,KAAKknB,eAAiBF,EACtBhnB,KAAKye,oBAAqB,KC5CoT,MCOhV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCgCf,MAAMkJ,GAAa,CACjBnS,KAAM,SAAUlR,GACd,OAAO0I,QAAQ4a,IAAI,CACvB,UAAM,KAAN,QAAM,WAAN,uGAAM,MAAN,IACA,UAAM,KAAN,QAAM,WAAN,kFAAM,MAAN,OAIE5D,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAG0H,eAAiBlX,EAAS,GAAGvQ,KAAK2L,OACrCoU,EAAG4H,gBAAkBpX,EAAS,GAAGvQ,KAAK0d,SAI1C,QACEtb,KAAM,aACNwpB,OAAQ,CAAChE,GAAyB8D,KAClCriB,WAAY,CAAd,gEAEE,OACE,MAAO,CACLoe,eAAgB,CAAtB,UACME,gBAAiB,CAAvB,UAEMkE,0BAA0B,EAC1BZ,eAAgB,KAIpBjiB,QAAS,CACP0e,YAAa,SAAUzX,GACrBlM,KAAKkF,QAAQnI,KAAK,CAAxB,6BCjFoV,MCOhV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIgD,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,cAAcA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,oBAAoBhC,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,cAAchC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI6mB,gBAAgB,IAAI,IAAI,IACxY,GAAkB,GCwBtB,MAAM,GAAN,CACEpR,KAAM,SAAUlR,GACd,MAAMyM,EAAQlE,EAAMtH,QAAQwE,qCAC5B,OAAOiM,EAAO/C,OAAO,CACnB/G,KAAM,QACN5K,WAAY,sEACZyP,MAAOA,KAIXiT,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAG0H,eAAiBlX,EAASvQ,KAAK2L,SAItC,QACEvJ,KAAM,iBACNwpB,OAAQ,CAAChE,GAAyB,KAClCve,WAAY,CAAd,kDAEE,OACE,MAAO,CACLoe,eAAgB,CAAtB,YAIEhf,SAAU,CACR,cACE,OAAO,IAAI8gB,GAAOxlB,KAAK0jB,eAAehb,MAAO,CAC3C6C,aAAa,EACbC,aAAa,EACbC,KAAM,0BACNia,OAAO,OCzDkV,MCO7V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI3lB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,cAAcA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,qBAAqBhC,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,cAAchC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI6jB,gBAAgBlb,UAAU,IAAI,IAAI,IACnZ,GAAkB,GCsBtB,MAAM,GAAN,CACE8M,KAAM,SAAUlR,GACd,OAAO0R,EAAO/C,OAAO,CACnB/G,KAAM,QACN5K,WAAY,kFACZyP,MAAO,MAIXiT,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAG4H,gBAAkBpX,EAASvQ,KAAK0d,SAIvC,QACEtb,KAAM,iBACNwpB,OAAQ,CAAChE,GAAyB,KAClCve,WAAY,CAAd,kDAEE,OACE,MAAO,CACLse,gBAAiB,MC5C2U,MCO9V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI7jB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,cAAcA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,oBAAoB,CAACgB,MAAM,CAAC,MAAQpB,EAAIgoB,aAAanC,aAAazlB,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,MAAM,CAACE,YAAY,UAAU,CAACF,EAAG,IAAI,CAACE,YAAY,UAAUC,YAAY,CAAC,gBAAgB,SAAS,CAACP,EAAIoC,GAAG,YAAYhC,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAgB,aAAEuB,WAAW,iBAAiBjB,YAAY,SAASc,MAAM,CAAC,GAAK,oBAAoB,KAAO,WAAW,KAAO,qBAAqB2X,SAAS,CAAC,QAAUe,MAAMI,QAAQla,EAAIoJ,cAAcpJ,EAAIoa,GAAGpa,EAAIoJ,aAAa,OAAO,EAAGpJ,EAAgB,cAAGyB,GAAG,CAAC,OAAS,SAASC,GAAQ,IAAI2Y,EAAIra,EAAIoJ,aAAakR,EAAK5Y,EAAOsX,OAAOuB,IAAID,EAAKE,QAAuB,GAAGV,MAAMI,QAAQG,GAAK,CAAC,IAAII,EAAI,KAAKC,EAAI1a,EAAIoa,GAAGC,EAAII,GAAQH,EAAKE,QAASE,EAAI,IAAI1a,EAAIoJ,aAAaiR,EAAIM,OAAO,CAACF,KAAYC,GAAK,IAAI1a,EAAIoJ,aAAaiR,EAAIva,MAAM,EAAE4a,GAAKC,OAAON,EAAIva,MAAM4a,EAAI,UAAW1a,EAAIoJ,aAAamR,MAASna,EAAG,QAAQ,CAACgB,MAAM,CAAC,IAAM,sBAAsB,CAACpB,EAAIoC,GAAG,oBAAoBhC,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIoC,GAAG,0EAA2EpC,EAAmB,gBAAEI,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAgB,aAAEuB,WAAW,iBAAiBjB,YAAY,SAASc,MAAM,CAAC,GAAK,oBAAoB,KAAO,WAAW,KAAO,qBAAqB2X,SAAS,CAAC,QAAUe,MAAMI,QAAQla,EAAIqJ,cAAcrJ,EAAIoa,GAAGpa,EAAIqJ,aAAa,OAAO,EAAGrJ,EAAgB,cAAGyB,GAAG,CAAC,OAAS,SAASC,GAAQ,IAAI2Y,EAAIra,EAAIqJ,aAAaiR,EAAK5Y,EAAOsX,OAAOuB,IAAID,EAAKE,QAAuB,GAAGV,MAAMI,QAAQG,GAAK,CAAC,IAAII,EAAI,KAAKC,EAAI1a,EAAIoa,GAAGC,EAAII,GAAQH,EAAKE,QAASE,EAAI,IAAI1a,EAAIqJ,aAAagR,EAAIM,OAAO,CAACF,KAAYC,GAAK,IAAI1a,EAAIqJ,aAAagR,EAAIva,MAAM,EAAE4a,GAAKC,OAAON,EAAIva,MAAM4a,EAAI,UAAW1a,EAAIqJ,aAAakR,MAASna,EAAG,QAAQ,CAACgB,MAAM,CAAC,IAAM,sBAAsB,CAACpB,EAAIoC,GAAG,iCAAiChC,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIoC,GAAG,0EAA0EpC,EAAI+B,OAAO3B,EAAG,MAAM,CAACE,YAAY,UAAU,CAACF,EAAG,IAAI,CAACE,YAAY,UAAUC,YAAY,CAAC,gBAAgB,SAAS,CAACP,EAAIoC,GAAG,aAAahC,EAAG,gBAAgB,CAACgB,MAAM,CAAC,QAAUpB,EAAIioB,cAAc3J,MAAM,CAACvf,MAAOiB,EAAQ,KAAEue,SAAS,SAAU9D,GAAMza,EAAI0L,KAAK+O,GAAKlZ,WAAW,WAAW,MAAM,GAAGnB,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,aAAahC,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIgoB,aAAapC,kBAAkBlpB,QAAQ,gBAAgB0D,EAAG,WAAW,CAACqZ,KAAK,kBAAkBrZ,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,eAAe,CAACgB,MAAM,CAAC,QAAUpB,EAAIgoB,iBAAiB,IAAI,IAAI,IACrxF,GAAkB,GCDlB,GAAS,WAAa,IAAIhoB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACA,EAAG,MAAM,CAACE,YAAY,mCAAmCC,YAAY,CAAC,gBAAgB,SAASP,EAAI4G,GAAI5G,EAAkB,gBAAE,SAASkoB,GAAM,OAAO9nB,EAAG,IAAI,CAACf,IAAI6oB,EAAK5nB,YAAY,kBAAkBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAImoB,IAAID,MAAS,CAACloB,EAAIoC,GAAGpC,EAAImG,GAAG+hB,SAAW,MACzX,GAAkB,GCQtB,IACE5pB,KAAM,kBAENgG,MAAO,CAAC,SAERK,SAAU,CACR,iBACE,MAAMyjB,EAAe,oCACrB,OAAOnoB,KAAKkL,MAAM4F,OAAO3S,IAAMgqB,EAAarU,SAAS3V,MAIzD8G,QAAS,CACPijB,IAAK,SAAUtnB,GACbZ,KAAKkF,QAAQnI,KAAK,CAAxB,mDAGIiiB,cAAe,WACbrf,OAAO2f,SAAS,CAAtB,6BC3ByV,MCOrV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIvf,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAAEJ,EAAc,WAAEI,EAAG,MAAMJ,EAAI4G,GAAI5G,EAAI4H,QAAiB,WAAE,SAASuc,GAAK,OAAO/jB,EAAG,MAAM,CAACf,IAAI8kB,EAAI7jB,YAAY,QAAQ,CAACF,EAAG,OAAO,CAACE,YAAY,qDAAqDc,MAAM,CAAC,GAAK,SAAW+iB,IAAM,CAACnkB,EAAIoC,GAAGpC,EAAImG,GAAGge,MAAQnkB,EAAI4G,GAAI5G,EAAI4H,QAAQwc,QAAQD,IAAM,SAAS7d,GAAQ,OAAOlG,EAAG,mBAAmB,CAACf,IAAIiH,EAAOzF,GAAGO,MAAM,CAAC,OAASkF,GAAQ7E,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAImlB,YAAY7e,MAAW,CAAClG,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIye,YAAYnY,MAAW,CAAClG,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,OAAM,MAAK,GAAGF,EAAG,MAAMJ,EAAI4G,GAAI5G,EAAgB,cAAE,SAASsG,GAAQ,OAAOlG,EAAG,mBAAmB,CAACf,IAAIiH,EAAOzF,GAAGO,MAAM,CAAC,OAASkF,GAAQ7E,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAImlB,YAAY7e,MAAW,CAAClG,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIye,YAAYnY,MAAW,CAAClG,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAK,GAAGF,EAAG,sBAAsB,CAACgB,MAAM,CAAC,KAAOpB,EAAI0e,mBAAmB,OAAS1e,EAAIqoB,gBAAgB,WAAaroB,EAAIuQ,YAAY9O,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0e,oBAAqB,OAAW,IACl0C,GAAkB,GCDlB,GAAS,SAAUxe,EAAGF,GAAM,IAAII,EAAGJ,EAAII,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,MAAM,CAACE,YAAY,yCAAyCmB,GAAG,CAAC,MAAQzB,EAAI8kB,UAAUC,QAAQ,CAAC3kB,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsE,MAAMgC,OAAOhI,WAAW8B,EAAG,MAAM,CAACE,YAAY,eAAe,CAACN,EAAIQ,GAAG,YAAY,MAC1T,GAAkB,GCWtB,IACElC,KAAM,iBACNgG,MAAO,CAAC,WCd8U,MCOpV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAItE,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAImlB,cAAc,CAACnlB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsG,OAAOhI,WAAW8B,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,YAAYhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsG,OAAOgiB,kBAAkBloB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,YAAYhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsG,OAAO8e,kBAAkBhlB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,UAAUhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsG,OAAOC,gBAAgBnG,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,cAAchC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,OAAPngB,CAAeA,EAAIsG,OAAO+e,WAAW,kBAAkBjlB,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIiO,YAAY,CAAC7N,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIqO,iBAAiB,CAACjO,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,gBAAgBhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IAC9hE,GAAkB,GCmDtB,IACEzD,KAAM,oBACNgG,MAAO,CAAC,OAAQ,UAEhBY,QAAS,CACP2P,KAAM,WACJ5U,KAAKwY,MAAM,SACXxC,EAAOtH,gBAAgB1O,KAAKqG,OAAO4H,KAAK,IAG1CD,UAAW,WACThO,KAAKwY,MAAM,SACXxC,EAAOhI,UAAUhO,KAAKqG,OAAO4H,MAG/BG,eAAgB,WACdpO,KAAKwY,MAAM,SACXxC,EAAO5H,eAAepO,KAAKqG,OAAO4H,MAGpCiX,YAAa,WACXllB,KAAKwY,MAAM,SACXxY,KAAKkF,QAAQnI,KAAK,CAAxB,2CC1E2V,MCOvV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCjBA,MAAMurB,GACnB7C,YAAa/c,EAAOuB,EAAU,CAAEsB,aAAa,EAAOC,aAAa,EAAOC,KAAM,OAAQia,OAAO,IAC3F1lB,KAAK0I,MAAQA,EACb1I,KAAKiK,QAAUA,EACfjK,KAAKmkB,QAAU,GACfnkB,KAAK2lB,kBAAoB,GACzB3lB,KAAK4lB,UAAY,GAEjB5lB,KAAK6lB,OAGPA,OACE7lB,KAAK8lB,8BACL9lB,KAAK+lB,oBACL/lB,KAAKgmB,kBAGPuC,eAAgBliB,GACd,MAA0B,SAAtBrG,KAAKiK,QAAQwB,KACRpF,EAAOqe,UAAUC,OAAO,GAAGC,cAE7Bve,EAAO+e,WAAW1C,UAAU,EAAG,GAGxC8F,gBAAiBniB,GACf,QAAIrG,KAAKiK,QAAQsB,aAAelF,EAAO8e,aAAqC,EAArB9e,EAAOgiB,gBAG1DroB,KAAKiK,QAAQuB,aAAoC,YAArBnF,EAAOC,WAMzC0f,kBACEhmB,KAAK4lB,UAAY,IAAI,IAAIW,IAAIvmB,KAAK2lB,kBAC/BllB,IAAI4F,GAAUrG,KAAKuoB,eAAeliB,MAGvCyf,8BACE,IAAI2C,EAAgBzoB,KAAK0I,OACrB1I,KAAKiK,QAAQsB,aAAevL,KAAKiK,QAAQuB,aAAexL,KAAKiK,QAAQwc,aACvEgC,EAAgBA,EAAc3X,OAAOzK,GAAUrG,KAAKwoB,gBAAgBniB,KAE5C,mBAAtBrG,KAAKiK,QAAQwB,OACfgd,EAAgB,IAAIA,GAAehd,KAAK,CAAC0M,EAAG8K,IAAMA,EAAEmC,WAAWsB,cAAcvO,EAAEiN,cAEjFplB,KAAK2lB,kBAAoB8C,EAG3B1C,oBACO/lB,KAAKiK,QAAQyb,QAChB1lB,KAAKmkB,QAAU,IAEjBnkB,KAAKmkB,QAAUnkB,KAAK2lB,kBAAkBgB,OAAO,CAAChoB,EAAG0H,KAC/C,MAAM6d,EAAMlkB,KAAKuoB,eAAeliB,GAEhC,OADA1H,EAAEulB,GAAO,IAAIvlB,EAAEulB,IAAQ,GAAI7d,GACpB1H,GACN,KCrBP,QACEN,KAAM,cACNiH,WAAY,CAAd,wCAEEjB,MAAO,CAAC,UAAW,cAEnB,OACE,MAAO,CACLoa,oBAAoB,EACpB2J,gBAAiB,KAIrB1jB,SAAU,CACRsgB,oBAAqB,WACnB,OAAOhlB,KAAKsQ,WAAatQ,KAAKsQ,WAAatQ,KAAKooB,gBAAgB9X,YAGlEyX,aAAc,WACZ,OAAIlO,MAAMI,QAAQja,KAAK2H,SACd3H,KAAK2H,QAEP3H,KAAK2H,QAAQge,mBAGtBkB,WAAY,WACV,OAAO,KAAb,oDAIE5hB,QAAS,CACPigB,YAAa,SAAU7e,GACrBrG,KAAKooB,gBAAkB/hB,EACU,YAA7BrG,KAAKglB,sBAEf,uCACQhlB,KAAKkF,QAAQnI,KAAK,CAA1B,mCAEQiD,KAAKkF,QAAQnI,KAAK,CAA1B,gCAIIyhB,YAAa,SAAUnY,GACrBrG,KAAKooB,gBAAkB/hB,EACvBrG,KAAKye,oBAAqB,KClFqT,MCOjV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI1e,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACiB,WAAW,CAAC,CAAC/C,KAAK,gBAAgBgD,QAAQ,kBAAkBvC,MAAOiB,EAAkB,eAAEuB,WAAW,mBAAmBjB,YAAY,WAAW0B,MAAM,CAAE,YAAahC,EAAIuC,YAAa,CAACnC,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,SAAS,CAACE,YAAY,SAASc,MAAM,CAAC,gBAAgB,OAAO,gBAAgB,iBAAiBK,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIuC,WAAavC,EAAIuC,aAAa,CAACnC,EAAG,OAAO,CAACJ,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIjB,UAAUiB,EAAImC,GAAG,OAAO/B,EAAG,MAAM,CAACE,YAAY,gBAAgBc,MAAM,CAAC,GAAK,gBAAgB,KAAO,SAAS,CAAChB,EAAG,MAAM,CAACE,YAAY,oBAAoBN,EAAI4G,GAAI5G,EAAW,SAAE,SAASiK,GAAQ,OAAO7J,EAAG,IAAI,CAACf,IAAI4K,EAAO3J,YAAY,gBAAgB0B,MAAM,CAAC,YAAahC,EAAIjB,QAAUkL,GAAQxI,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAI2oB,OAAO1e,MAAW,CAACjK,EAAIoC,GAAG,IAAIpC,EAAImG,GAAG8D,GAAQ,UAAS,QAC33B,GAAkB,CAAC,WAAa,IAAIjK,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,OAAO,CAACE,YAAY,iBAAiB,CAACF,EAAG,IAAI,CAACE,YAAY,uBAAuBc,MAAM,CAAC,cAAc,cCuBnN,IACE9C,KAAM,eAENgG,MAAO,CAAC,QAAS,WAEjB,OACE,MAAO,CACL/B,WAAW,IAIf2C,QAAS,CACP,eAAJ,GACMjF,KAAKsC,WAAY,GAGnB,OAAJ,GACMtC,KAAKsC,WAAY,EACjBtC,KAAKwY,MAAM,QAASxO,MC1C4T,MCOlV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCsCf,MAAM2e,GAAc,CAClBnT,KAAM,SAAUlR,GACd,OAAO0R,EAAO3F,gBAAgB,UAGhC2T,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAGrU,QAAU6E,EAASvQ,OAI1B,QACEoC,KAAM,cACNwpB,OAAQ,CAAChE,GAAyB8E,KAClCrjB,WAAY,CAAd,sFAEE,OACE,MAAO,CACLqC,QAAS,CAAf,UACMqgB,aAAc,CAAC,OAAQ,oBAI3BtjB,SAAU,CACR,eACE,OAAO,IAAI4jB,GAAQtoB,KAAK2H,QAAQe,MAAO,CACrC6C,YAAavL,KAAKmJ,aAClBqC,YAAaxL,KAAKoJ,aAClBqC,KAAMzL,KAAKyL,KACXia,OAAO,KAIX,kBACE,OAAO1lB,KAAK8E,OAAOC,MAAMe,QAAQC,oBAGnCoD,aAAc,CACZ,MACE,OAAOnJ,KAAK8E,OAAOC,MAAMoE,cAE3B,IAAN,GACQnJ,KAAK8E,OAAOE,OAAO,EAA3B,KAIIoE,aAAc,CACZ,MACE,OAAOpJ,KAAK8E,OAAOC,MAAMqE,cAE3B,IAAN,GACQpJ,KAAK8E,OAAOE,OAAO,EAA3B,KAIIyG,KAAM,CACJ,MACE,OAAOzL,KAAK8E,OAAOC,MAAMsE,cAE3B,IAAN,GACQrJ,KAAK8E,OAAOE,OAAO,EAA3B,MAKEC,QAAS,CACP2jB,YAAa,WACXjpB,OAAO2f,SAAS,CAAtB,6BC1HqV,MCOjV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIvf,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,MAAM,CAACE,YAAY,UAAU,CAACF,EAAG,IAAI,CAACE,YAAY,UAAUC,YAAY,CAAC,gBAAgB,SAAS,CAACP,EAAIoC,GAAG,aAAahC,EAAG,gBAAgB,CAACgB,MAAM,CAAC,QAAUpB,EAAIioB,cAAc3J,MAAM,CAACvf,MAAOiB,EAAQ,KAAEue,SAAS,SAAU9D,GAAMza,EAAI0L,KAAK+O,GAAKlZ,WAAW,WAAW,OAAOnB,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsG,OAAOhI,WAAW8B,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI8oB,2BAA4B,KAAQ,CAAC1oB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,yCAAyCF,EAAG,IAAI,CAACE,YAAY,qCAAqCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACJ,EAAIoC,GAAG,mBAAmBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,oCAAoC,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsG,OAAOgiB,aAAa,cAAcloB,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAI+oB,cAAc,CAAC/oB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsG,OAAO8e,aAAa,eAAehlB,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI6mB,eAAezmB,EAAG,sBAAsB,CAACgB,MAAM,CAAC,KAAOpB,EAAI8oB,0BAA0B,OAAS9oB,EAAIsG,QAAQ7E,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI8oB,2BAA4B,OAAW,IAAI,IAChhD,GAAkB,GCwCtB,MAAME,GAAa,CACjBvT,KAAM,SAAUlR,GACd,OAAO0I,QAAQ4a,IAAI,CACvB,qCACA,+CAIE5D,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAG3V,OAASmG,EAAS,GAAGvQ,KACxB+f,EAAGpU,OAAS4E,EAAS,GAAGvQ,OAI5B,QACEoC,KAAM,aACNwpB,OAAQ,CAAChE,GAAyBkF,KAClCzjB,WAAY,CAAd,0EAEE,OACE,MAAO,CACLe,OAAQ,GACRuB,OAAQ,CAAd,UAEMogB,aAAc,CAAC,OAAQ,gBACvBa,2BAA2B,IAI/BnkB,SAAU,CACR,cACE,OAAO,IAAI8gB,GAAOxlB,KAAK4H,OAAOc,MAAO,CACnC+C,KAAMzL,KAAKyL,KACXia,OAAO,KAIXja,KAAM,CACJ,MACE,OAAOzL,KAAK8E,OAAOC,MAAMuE,oBAE3B,IAAN,GACQtJ,KAAK8E,OAAOE,OAAO,EAA3B,MAKEC,QAAS,CACP6jB,YAAa,WACX9oB,KAAKkF,QAAQnI,KAAK,CAAxB,mDAGI6X,KAAM,WACJoB,EAAOtH,gBAAgB1O,KAAK4H,OAAOc,MAAMjI,IAAI0X,GAAKA,EAAElK,KAAK+a,KAAK,MAAM,MC9F0Q,MCOhV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIjpB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,cAAcA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,oBAAoB,CAACgB,MAAM,CAAC,MAAQpB,EAAI6mB,YAAYhB,aAAazlB,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,MAAM,CAACE,YAAY,UAAU,CAACF,EAAG,IAAI,CAACE,YAAY,UAAUC,YAAY,CAAC,gBAAgB,SAAS,CAACP,EAAIoC,GAAG,YAAYhC,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAgB,aAAEuB,WAAW,iBAAiBjB,YAAY,SAASc,MAAM,CAAC,GAAK,oBAAoB,KAAO,WAAW,KAAO,qBAAqB2X,SAAS,CAAC,QAAUe,MAAMI,QAAQla,EAAIoJ,cAAcpJ,EAAIoa,GAAGpa,EAAIoJ,aAAa,OAAO,EAAGpJ,EAAgB,cAAGyB,GAAG,CAAC,OAAS,SAASC,GAAQ,IAAI2Y,EAAIra,EAAIoJ,aAAakR,EAAK5Y,EAAOsX,OAAOuB,IAAID,EAAKE,QAAuB,GAAGV,MAAMI,QAAQG,GAAK,CAAC,IAAII,EAAI,KAAKC,EAAI1a,EAAIoa,GAAGC,EAAII,GAAQH,EAAKE,QAASE,EAAI,IAAI1a,EAAIoJ,aAAaiR,EAAIM,OAAO,CAACF,KAAYC,GAAK,IAAI1a,EAAIoJ,aAAaiR,EAAIva,MAAM,EAAE4a,GAAKC,OAAON,EAAIva,MAAM4a,EAAI,UAAW1a,EAAIoJ,aAAamR,MAASna,EAAG,QAAQ,CAACgB,MAAM,CAAC,IAAM,sBAAsB,CAACpB,EAAIoC,GAAG,oBAAoBhC,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIoC,GAAG,sFAAuFpC,EAAmB,gBAAEI,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAgB,aAAEuB,WAAW,iBAAiBjB,YAAY,SAASc,MAAM,CAAC,GAAK,oBAAoB,KAAO,WAAW,KAAO,qBAAqB2X,SAAS,CAAC,QAAUe,MAAMI,QAAQla,EAAIqJ,cAAcrJ,EAAIoa,GAAGpa,EAAIqJ,aAAa,OAAO,EAAGrJ,EAAgB,cAAGyB,GAAG,CAAC,OAAS,SAASC,GAAQ,IAAI2Y,EAAIra,EAAIqJ,aAAaiR,EAAK5Y,EAAOsX,OAAOuB,IAAID,EAAKE,QAAuB,GAAGV,MAAMI,QAAQG,GAAK,CAAC,IAAII,EAAI,KAAKC,EAAI1a,EAAIoa,GAAGC,EAAII,GAAQH,EAAKE,QAASE,EAAI,IAAI1a,EAAIqJ,aAAagR,EAAIM,OAAO,CAACF,KAAYC,GAAK,IAAI1a,EAAIqJ,aAAagR,EAAIva,MAAM,EAAE4a,GAAKC,OAAON,EAAIva,MAAM4a,EAAI,UAAW1a,EAAIqJ,aAAakR,MAASna,EAAG,QAAQ,CAACgB,MAAM,CAAC,IAAM,sBAAsB,CAACpB,EAAIoC,GAAG,gCAAgChC,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIoC,GAAG,yEAAyEpC,EAAI+B,OAAO3B,EAAG,MAAM,CAACE,YAAY,UAAU,CAACF,EAAG,IAAI,CAACE,YAAY,UAAUC,YAAY,CAAC,gBAAgB,SAAS,CAACP,EAAIoC,GAAG,aAAahC,EAAG,gBAAgB,CAACgB,MAAM,CAAC,QAAUpB,EAAIioB,cAAc3J,MAAM,CAACvf,MAAOiB,EAAQ,KAAEue,SAAS,SAAU9D,GAAMza,EAAI0L,KAAK+O,GAAKlZ,WAAW,WAAW,MAAM,GAAGnB,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,YAAYhC,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI6mB,YAAYjB,kBAAkBlpB,QAAQ,eAAe0D,EAAG,WAAW,CAACqZ,KAAK,kBAAkBrZ,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI6mB,gBAAgB,IAAI,IAAI,IACxxF,GAAkB,GCuDtB,MAAMqC,GAAa,CACjBzT,KAAM,SAAUlR,GACd,OAAO0R,EAAOtF,eAAe,UAG/BsT,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAGpU,OAAS4E,EAASvQ,KACrB+f,EAAGkN,WAAa,IAAI,IAAI3C,IAAIvK,EAAGpU,OAAOc,MAC1C,yDACA,gDAIA,QACErK,KAAM,aACNwpB,OAAQ,CAAChE,GAAyBoF,KAClC3jB,WAAY,CAAd,qFAEE,OACE,MAAO,CACLsC,OAAQ,CAAd,UACMogB,aAAc,CAAC,OAAQ,iBAAkB,uBAI7CtjB,SAAU,CACR,cACE,OAAO,IAAI8gB,GAAOxlB,KAAK4H,OAAOc,MAAO,CACnC6C,YAAavL,KAAKmJ,aAClBqC,YAAaxL,KAAKoJ,aAClBqC,KAAMzL,KAAKyL,KACXia,OAAO,KAIX,kBACE,OAAO1lB,KAAK8E,OAAOC,MAAMe,QAAQC,oBAGnCoD,aAAc,CACZ,MACE,OAAOnJ,KAAK8E,OAAOC,MAAMoE,cAE3B,IAAN,GACQnJ,KAAK8E,OAAOE,OAAO,EAA3B,KAIIoE,aAAc,CACZ,MACE,OAAOpJ,KAAK8E,OAAOC,MAAMqE,cAE3B,IAAN,GACQpJ,KAAK8E,OAAOE,OAAO,EAA3B,KAIIyG,KAAM,CACJ,MACE,OAAOzL,KAAK8E,OAAOC,MAAMwE,aAE3B,IAAN,GACQvJ,KAAK8E,OAAOE,OAAO,EAA3B,MAKEC,QAAS,CACP2jB,YAAa,WACXjpB,OAAO2f,SAAS,CAAtB,6BC7HoV,MCOhV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIvf,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,oBAAoB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAMlI,SAAS8B,EAAG,KAAK,CAACE,YAAY,sDAAsD,CAACF,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAImlB,cAAc,CAACnlB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAMF,aAAalG,EAAG,MAAM,CAACE,YAAY,mDAAmD,CAACF,EAAG,IAAI,CAACE,YAAY,qCAAqCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACJ,EAAIoC,GAAG,eAAehC,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIopB,0BAA2B,KAAQ,CAAChpB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,6CAA6CF,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,IAAI,CAACE,YAAY,+CAA+C,CAACF,EAAG,gBAAgB,CAACgB,MAAM,CAAC,YAAcpB,EAAIwG,MAAMkb,YAAY,OAAS1hB,EAAIwG,MAAMF,OAAO,MAAQtG,EAAIwG,MAAMlI,MAAMmD,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIopB,0BAA2B,OAAU,KAAKhpB,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,2DAA2D,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAM4e,aAAa,aAAahlB,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI4Z,OAAO,KAAO5Z,EAAIwG,MAAM0H,OAAO9N,EAAG,qBAAqB,CAACgB,MAAM,CAAC,KAAOpB,EAAIopB,yBAAyB,MAAQppB,EAAIwG,OAAO/E,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIopB,0BAA2B,OAAW,IAAI,IACnjD,GAAkB,G,aCuCtB,MAAMC,GAAY,CAChB5T,KAAM,SAAUlR,GACd,OAAO0I,QAAQ4a,IAAI,CACvB,mCACA,6CAIE5D,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAGzV,MAAQiG,EAAS,GAAGvQ,KACvB+f,EAAGrC,OAASnN,EAAS,GAAGvQ,KAAKyM,QAIjC,QACErK,KAAM,YACNwpB,OAAQ,CAAChE,GAAyBuF,KAClC9jB,WAAY,CAAd,iFAEE,OACE,MAAO,CACLiB,MAAO,GACPoT,OAAQ,GAERwP,0BAA0B,IAI9BlkB,QAAS,CACPigB,YAAa,WACXllB,KAAKye,oBAAqB,EAC1Bze,KAAKkF,QAAQnI,KAAK,CAAxB,+CAGI6X,KAAM,WACJoB,EAAOtH,gBAAgB1O,KAAKuG,MAAM0H,KAAK,MC3EsS,MCO/U,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIlO,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,cAAcA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,oBAAoB,CAACgB,MAAM,CAAC,MAAQpB,EAAImpB,eAAe,GAAG/oB,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,YAAYhC,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIspB,OAAOC,OAAO,eAAenpB,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACzZ,EAAI4G,GAAI5G,EAAIspB,OAAY,OAAE,SAAShY,GAAO,OAAOlR,EAAG,kBAAkB,CAACf,IAAIiS,EAAMhT,KAAK8C,MAAM,CAAC,MAAQkQ,GAAO7P,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIggB,WAAW1O,MAAU,CAAClR,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIye,YAAYnN,MAAU,CAAClR,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAKF,EAAG,qBAAqB,CAACgB,MAAM,CAAC,KAAOpB,EAAI0e,mBAAmB,MAAQ1e,EAAIwpB,gBAAgB/nB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0e,oBAAqB,OAAW,IAAI,IAAI,IAC99B,GAAkB,GCDlB,GAAS,SAAUxe,EAAGF,GAAM,IAAII,EAAGJ,EAAII,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,QAAQc,MAAM,CAAC,GAAK,SAAWpB,EAAIsE,MAAMgN,MAAMhT,KAAKsmB,OAAO,GAAGC,gBAAgB,CAACzkB,EAAG,MAAM,CAACE,YAAY,yCAAyCmB,GAAG,CAAC,MAAQzB,EAAI8kB,UAAUC,QAAQ,CAAC3kB,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsE,MAAMgN,MAAMhT,WAAW8B,EAAG,MAAM,CAACE,YAAY,eAAe,CAACN,EAAIQ,GAAG,YAAY,MAC9X,GAAkB,GCWtB,IACElC,KAAM,gBACNgG,MAAO,CAAC,UCd6U,MCOnV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAItE,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAIggB,aAAa,CAAChgB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsR,MAAMhT,aAAa8B,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIiO,YAAY,CAAC7N,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIqO,iBAAiB,CAACjO,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,gBAAgBhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IAC/5C,GAAkB,GCiCtB,IACEzD,KAAM,mBACNgG,MAAO,CAAC,OAAQ,SAEhBY,QAAS,CACP2P,KAAM,WACJ5U,KAAKwY,MAAM,SACXxC,EAAOjH,uBAAuB,aAAe/O,KAAKqR,MAAMhT,KAAO,6BAA6B,IAG9F2P,UAAW,WACThO,KAAKwY,MAAM,SACXxC,EAAO1H,qBAAqB,aAAetO,KAAKqR,MAAMhT,KAAO,8BAG/D+P,eAAgB,WACdpO,KAAKwY,MAAM,SACXxC,EAAOzH,0BAA0B,aAAevO,KAAKqR,MAAMhT,KAAO,8BAGpE0hB,WAAY,WACV/f,KAAKwY,MAAM,SACXxY,KAAKkF,QAAQnI,KAAK,CAAxB,iDCxD0V,MCOtV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCiBf,MAAMysB,GAAa,CACjBhU,KAAM,SAAUlR,GACd,OAAO0R,EAAO7E,kBAGhB6S,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAGqN,OAAS7c,EAASvQ,OAIzB,QACEoC,KAAM,aACNwpB,OAAQ,CAAChE,GAAyB2F,KAClClkB,WAAY,CAAd,4FAEE,OACE,MAAO,CACL+jB,OAAQ,CAAd,UAEM5K,oBAAoB,EACpB8K,eAAgB,KAIpB7kB,SAAU,CACR,aACE,MAAO,IAAI,IAAI6hB,IAAIvmB,KAAKqpB,OAAO3gB,MACrC,2CAIEzD,QAAS,CACP8a,WAAY,SAAU1O,GACpBrR,KAAKkF,QAAQnI,KAAK,CAAxB,sCAGIyhB,YAAa,SAAUnN,GACrBrR,KAAKupB,eAAiBlY,EACtBrR,KAAKye,oBAAqB,KCzEoT,MCOhV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI1e,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,oBAAoB,CAACgB,MAAM,CAAC,MAAQpB,EAAImpB,eAAe,GAAG/oB,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI1B,WAAW8B,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0pB,0BAA2B,KAAQ,CAACtpB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,yCAAyCF,EAAG,IAAI,CAACE,YAAY,qCAAqCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACJ,EAAIoC,GAAG,mBAAmBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,oCAAoC,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2pB,aAAaJ,OAAO,cAAcnpB,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAI+oB,cAAc,CAAC/oB,EAAIoC,GAAG,cAAchC,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI2pB,aAAahhB,SAASvI,EAAG,qBAAqB,CAACgB,MAAM,CAAC,KAAOpB,EAAI0pB,yBAAyB,MAAQ,CAAE,KAAQ1pB,EAAI1B,OAAQmD,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0pB,0BAA2B,OAAW,IAAI,IAAI,IACjxC,GAAkB,GCmCtB,MAAME,GAAY,CAChBnU,KAAM,SAAUlR,GACd,OAAO0R,EAAO5E,cAAc9M,EAAGgJ,OAAO+D,QAGxC2S,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAG3d,KAAO2d,EAAGrX,OAAO2I,OAAO+D,MAC3B2K,EAAG0N,aAAeld,EAASvQ,KAAK2L,SAIpC,QACEvJ,KAAM,YACNwpB,OAAQ,CAAChE,GAAyB8F,KAClCrkB,WAAY,CAAd,4EAEE,OACE,MAAO,CACLjH,KAAM,GACNqrB,aAAc,CAApB,UAEMD,0BAA0B,IAI9B/kB,SAAU,CACR,aACE,MAAO,IAAI,IAAI6hB,IAAIvmB,KAAK0pB,aAAahhB,MAC3C,2CAIEzD,QAAS,CACP6jB,YAAa,WACX9oB,KAAKye,oBAAqB,EAC1Bze,KAAKkF,QAAQnI,KAAK,CAAxB,+CAGI6X,KAAM,WACJoB,EAAOjH,uBAAuB,aAAe/O,KAAK3B,KAAO,6BAA6B,IAGxFmgB,YAAa,SAAUjY,GACrBvG,KAAKokB,eAAiB7d,EACtBvG,KAAKye,oBAAqB,KChFmT,MCO/U,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI1e,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,oBAAoB,CAACgB,MAAM,CAAC,MAAQpB,EAAImpB,eAAe,GAAG/oB,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsR,YAAYlR,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0pB,0BAA2B,KAAQ,CAACtpB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,yCAAyCF,EAAG,IAAI,CAACE,YAAY,qCAAqCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACJ,EAAIoC,GAAG,mBAAmBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,oCAAoC,CAACF,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAIggB,aAAa,CAAChgB,EAAIoC,GAAG,YAAYpC,EAAIoC,GAAG,MAAMpC,EAAImG,GAAGnG,EAAI4Z,OAAO2P,OAAO,aAAanpB,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI4Z,OAAOjR,MAAM,WAAa3I,EAAIuB,cAAcnB,EAAG,qBAAqB,CAACgB,MAAM,CAAC,KAAOpB,EAAI0pB,yBAAyB,MAAQ,CAAE,KAAQ1pB,EAAIsR,QAAS7P,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0pB,0BAA2B,OAAW,IAAI,IAAI,IACryC,GAAkB,GCmCtB,MAAMG,GAAa,CACjBpU,KAAM,SAAUlR,GACd,OAAO0R,EAAOzE,qBAAqBjN,EAAGgJ,OAAO+D,QAG/C2S,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAG3K,MAAQ2K,EAAGrX,OAAO2I,OAAO+D,MAC5B2K,EAAGrC,OAASnN,EAASvQ,KAAK0d,SAI9B,QACEtb,KAAM,kBACNwpB,OAAQ,CAAChE,GAAyB+F,KAClCtkB,WAAY,CAAd,4EAEE,OACE,MAAO,CACLqU,OAAQ,CAAd,UACMtI,MAAO,GAEPoY,0BAA0B,IAI9B/kB,SAAU,CACR,aACE,MAAO,IAAI,IAAI6hB,IAAIvmB,KAAK2Z,OAAOjR,MACrC,gDAGI,aACE,MAAO,aAAe1I,KAAKqR,MAAQ,8BAIvCpM,QAAS,CACP8a,WAAY,WACV/f,KAAKye,oBAAqB,EAC1Bze,KAAKkF,QAAQnI,KAAK,CAAxB,0CAGI6X,KAAM,WACJoB,EAAOjH,uBAAuB/O,KAAKsB,YAAY,MC/EoS,MCOrV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIvB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,oBAAoB,CAACgB,MAAM,CAAC,MAAQpB,EAAImpB,eAAe,GAAG/oB,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsG,OAAOhI,WAAW8B,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI8oB,2BAA4B,KAAQ,CAAC1oB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,yCAAyCF,EAAG,IAAI,CAACE,YAAY,qCAAqCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACJ,EAAIoC,GAAG,mBAAmBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,oCAAoC,CAACF,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAImlB,cAAc,CAACnlB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsG,OAAOgiB,aAAa,aAAatoB,EAAIoC,GAAG,MAAMpC,EAAImG,GAAGnG,EAAIsG,OAAO8e,aAAa,aAAahlB,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI4Z,OAAOjR,MAAM,KAAO3I,EAAI8pB,cAAc1pB,EAAG,sBAAsB,CAACgB,MAAM,CAAC,KAAOpB,EAAI8oB,0BAA0B,OAAS9oB,EAAIsG,QAAQ7E,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI8oB,2BAA4B,OAAW,IAAI,IAAI,IACt0C,GAAkB,GCmCtB,MAAM,GAAN,CACErT,KAAM,SAAUlR,GACd,OAAO0I,QAAQ4a,IAAI,CACvB,qCACA,+CAIE5D,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAG3V,OAASmG,EAAS,GAAGvQ,KACxB+f,EAAGrC,OAASnN,EAAS,GAAGvQ,KAAK0d,SAIjC,QACEtb,KAAM,mBACNwpB,OAAQ,CAAChE,GAAyB,KAClCve,WAAY,CAAd,6EAEE,OACE,MAAO,CACLe,OAAQ,GACRsT,OAAQ,CAAd,UAEMkP,2BAA2B,IAI/BnkB,SAAU,CACR,aACE,MAAO,IAAI,IAAI6hB,IAAIvmB,KAAK2Z,OAAOjR,MACrC,gDAGI,aACE,OAAO1I,KAAK2Z,OAAOjR,MAAMjI,IAAI0X,GAAKA,EAAElK,KAAK+a,KAAK,OAIlD/jB,QAAS,CACPigB,YAAa,WACXllB,KAAKye,oBAAqB,EAC1Bze,KAAKkF,QAAQnI,KAAK,CAAxB,yCAGI6X,KAAM,WACJoB,EAAOtH,gBAAgB1O,KAAK2Z,OAAOjR,MAAMjI,IAAI0X,GAAKA,EAAElK,KAAK+a,KAAK,MAAM,MClFgR,MCOtV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIjpB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,cAAcA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,oBAAoB,CAACgB,MAAM,CAAC,MAAQpB,EAAI+pB,eAAelE,cAAc,GAAGzlB,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIgqB,YAAY5pB,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIiqB,UAAUV,OAAO,kBAAkBnpB,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,iBAAiB,CAACgB,MAAM,CAAC,UAAYpB,EAAI+pB,mBAAmB,IAAI,IAAI,IAC/hB,GAAkB,GCDlB,GAAS,WAAa,IAAI/pB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAAEJ,EAAc,WAAEI,EAAG,MAAMJ,EAAI4G,GAAI5G,EAAIiqB,UAAmB,WAAE,SAAS9F,GAAK,OAAO/jB,EAAG,MAAM,CAACf,IAAI8kB,EAAI7jB,YAAY,QAAQ,CAACF,EAAG,OAAO,CAACE,YAAY,qDAAqDc,MAAM,CAAC,GAAK,SAAW+iB,IAAM,CAACnkB,EAAIoC,GAAGpC,EAAImG,GAAGge,MAAQnkB,EAAI4G,GAAI5G,EAAIiqB,UAAU7F,QAAQD,IAAM,SAASvS,GAAU,OAAOxR,EAAG,qBAAqB,CAACf,IAAIuS,EAAS/Q,GAAGO,MAAM,CAAC,SAAWwQ,GAAUnQ,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIkqB,cAActY,MAAa,CAACxR,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIye,YAAY7M,MAAa,CAACxR,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,OAAM,MAAK,GAAGF,EAAG,MAAMJ,EAAI4G,GAAI5G,EAAkB,gBAAE,SAAS4R,GAAU,OAAOxR,EAAG,qBAAqB,CAACf,IAAIuS,EAAS/Q,GAAGO,MAAM,CAAC,SAAWwQ,GAAUnQ,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIkqB,cAActY,MAAa,CAACxR,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIye,YAAY7M,MAAa,CAACxR,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAK,GAAGF,EAAG,wBAAwB,CAACgB,MAAM,CAAC,KAAOpB,EAAI0e,mBAAmB,SAAW1e,EAAImqB,kBAAkB,WAAanqB,EAAIuQ,YAAY9O,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0e,oBAAqB,OAAW,IAC92C,GAAkB,GCDlB,GAAS,SAAUxe,EAAGF,GAAM,IAAII,EAAGJ,EAAII,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,QAAQc,MAAM,CAAC,GAAK,SAAWpB,EAAIsE,MAAMsN,SAAStT,KAAKsmB,OAAO,GAAGC,gBAAgB,CAACzkB,EAAG,MAAM,CAACE,YAAY,yCAAyCmB,GAAG,CAAC,MAAQzB,EAAI8kB,UAAUC,QAAQ,CAAC3kB,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsE,MAAMsN,SAAStT,WAAW8B,EAAG,MAAM,CAACE,YAAY,eAAe,CAACN,EAAIQ,GAAG,YAAY,MACpY,GAAkB,GCWtB,IACElC,KAAM,mBACNgG,MAAO,CAAC,aCdgV,MCOtV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAItE,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAIoqB,cAAc,CAACpqB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI4R,SAAStT,WAAW8B,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,YAAYhC,EAAG,IAAI,CAACE,YAAY,qBAAqBmB,GAAG,CAAC,MAAQzB,EAAIoqB,cAAc,CAACpqB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI4R,SAAS0W,kBAAkBloB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,YAAYhC,EAAG,IAAI,CAACE,YAAY,qBAAqBmB,GAAG,CAAC,MAAQzB,EAAI+oB,cAAc,CAAC/oB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI4R,SAASwT,oBAAoBhlB,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIiO,YAAY,CAAC7N,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIqO,iBAAiB,CAACjO,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,gBAAgBhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IACzwD,GAAkB,GCyCtB,IACEzD,KAAM,sBACNgG,MAAO,CAAC,OAAQ,YAEhBY,QAAS,CACP2P,KAAM,WACJ5U,KAAKwY,MAAM,SACXxC,EAAOjH,uBAAuB,gBAAkB/O,KAAK2R,SAAStT,KAAO,6BAA6B,IAGpG2P,UAAW,WACThO,KAAKwY,MAAM,SACXxC,EAAO1H,qBAAqB,gBAAkBtO,KAAK2R,SAAStT,KAAO,8BAGrE+P,eAAgB,WACdpO,KAAKwY,MAAM,SACXxC,EAAOzH,0BAA0B,gBAAkBvO,KAAK2R,SAAStT,KAAO,8BAG1E8rB,YAAa,WACXnqB,KAAKwY,MAAM,SACXxY,KAAKkF,QAAQnI,KAAK,CAAxB,8DAGI+rB,YAAa,WACX9oB,KAAKye,oBAAqB,EAC1Bze,KAAKkF,QAAQnI,KAAK,CAAxB,gECrE6V,MCOzV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCjBA,MAAMqtB,GACnB3E,YAAa/c,EAAOuB,EAAU,CAAEsB,aAAa,EAAOC,aAAa,EAAOC,KAAM,OAAQia,OAAO,IAC3F1lB,KAAK0I,MAAQA,EACb1I,KAAKiK,QAAUA,EACfjK,KAAKmkB,QAAU,GACfnkB,KAAK2lB,kBAAoB,GACzB3lB,KAAK4lB,UAAY,GAEjB5lB,KAAK6lB,OAGPA,OACE7lB,KAAK8lB,8BACL9lB,KAAK+lB,oBACL/lB,KAAKgmB,kBAGPqE,iBAAkB1Y,GAChB,MAA0B,SAAtB3R,KAAKiK,QAAQwB,KACRkG,EAAS+S,UAAUC,OAAO,GAAGC,cAE/BjT,EAASyT,WAAW1C,UAAU,EAAG,GAG1C4H,kBAAmB3Y,GACjB,QAAI3R,KAAKiK,QAAQsB,aAAeoG,EAASwT,aAAuC,EAAvBxT,EAAS0W,gBAG9DroB,KAAKiK,QAAQuB,aAAsC,YAAvBmG,EAASrL,WAM3C0f,kBACEhmB,KAAK4lB,UAAY,IAAI,IAAIW,IAAIvmB,KAAK2lB,kBAC/BllB,IAAIkR,GAAY3R,KAAKqqB,iBAAiB1Y,MAG3CmU,8BACE,IAAIyE,EAAkBvqB,KAAK0I,OACvB1I,KAAKiK,QAAQsB,aAAevL,KAAKiK,QAAQuB,aAAexL,KAAKiK,QAAQwc,aACvE8D,EAAkBA,EAAgBzZ,OAAOa,GAAY3R,KAAKsqB,kBAAkB3Y,KAEpD,mBAAtB3R,KAAKiK,QAAQwB,OACf8e,EAAkB,IAAIA,GAAiB9e,KAAK,CAAC0M,EAAG8K,IAAMA,EAAEmC,WAAWsB,cAAcvO,EAAEiN,cAErFplB,KAAK2lB,kBAAoB4E,EAG3BxE,oBACO/lB,KAAKiK,QAAQyb,QAChB1lB,KAAKmkB,QAAU,IAEjBnkB,KAAKmkB,QAAUnkB,KAAK2lB,kBAAkBgB,OAAO,CAAChoB,EAAGgT,KAC/C,MAAMuS,EAAMlkB,KAAKqqB,iBAAiB1Y,GAElC,OADAhT,EAAEulB,GAAO,IAAIvlB,EAAEulB,IAAQ,GAAIvS,GACpBhT,GACN,KCrBP,QACEN,KAAM,gBACNiH,WAAY,CAAd,4CAEEjB,MAAO,CAAC,YAAa,cAErB,OACE,MAAO,CACLoa,oBAAoB,EACpByL,kBAAmB,KAIvBxlB,SAAU,CACRsgB,oBAAqB,WACnB,OAAOhlB,KAAKsQ,WAAatQ,KAAKsQ,WAAatQ,KAAKkqB,kBAAkB5Z,YAGpEwZ,eAAgB,WACd,OAAIjQ,MAAMI,QAAQja,KAAKgqB,WACdhqB,KAAKgqB,UAEPhqB,KAAKgqB,UAAUrE,mBAGxBkB,WAAY,WACV,OAAO,KAAb,wDAIE5hB,QAAS,CACPglB,cAAe,SAAUtY,GACvB3R,KAAKkqB,kBAAoBvY,EACzB3R,KAAKkF,QAAQnI,KAAK,CAAxB,kDAGIyhB,YAAa,SAAU7M,GACrB3R,KAAKkqB,kBAAoBvY,EACzB3R,KAAKye,oBAAqB,KC5EuT,MCOnV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCUf,MAAM+L,GAAgB,CACpBhV,KAAM,SAAUlR,GACd,OAAO0R,EAAOvE,qBAGhBuS,IAAK,SAAUhI,EAAIxP,GACbA,EAASvQ,KAAK+tB,WAChBhO,EAAGgO,UAAYxd,EAASvQ,KAAK+tB,UAC7BhO,EAAG+N,QAAU/N,EAAGrX,OAAO2I,OAAO+D,QAE9B2K,EAAGgO,UAAYxd,EAASvQ,KACxB+f,EAAG+N,QAAU,eAKnB,QACE1rB,KAAM,gBACNwpB,OAAQ,CAAChE,GAAyB2G,KAClCllB,WAAY,CAAd,wEAEE,OACE,MAAO,CACL0kB,UAAW,CAAjB,UACMD,QAAS,GAETtL,oBAAoB,EACpByL,kBAAmB,KAIvBxlB,SAAU,CACR,aACE,MAAO,IAAI,IAAI6hB,IAAIvmB,KAAKgqB,UAAUthB,MACxC,0CAGI,iBACE,OAAO,IAAI0hB,GAAUpqB,KAAKgqB,UAAUthB,MAAO,CACzC+C,KAAM,OACNia,OAAO,MAKbzgB,QAAS,CACPglB,cAAe,SAAUtY,GACvB3R,KAAKkF,QAAQnI,KAAK,CAAxB,kDAGIyhB,YAAa,SAAU7M,GACrB3R,KAAKkqB,kBAAoBvY,EACzB3R,KAAKye,oBAAqB,KChFuT,MCOnV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI1e,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI1B,WAAW8B,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0qB,6BAA8B,KAAQ,CAACtqB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,yCAAyCF,EAAG,IAAI,CAACE,YAAY,qCAAqCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACJ,EAAIoC,GAAG,mBAAmBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,oCAAoC,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2qB,gBAAgBpB,OAAO,cAAcnpB,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAI+oB,cAAc,CAAC/oB,EAAIoC,GAAG,cAAcpC,EAAI4G,GAAI5G,EAAI2qB,gBAAqB,OAAE,SAASnkB,GAAO,OAAOpG,EAAG,mBAAmB,CAACf,IAAImH,EAAM3F,GAAGO,MAAM,CAAC,MAAQoF,GAAO/E,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAI4f,WAAWpZ,MAAU,CAACpG,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIye,YAAYjY,MAAU,CAACpG,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAKF,EAAG,qBAAqB,CAACgB,MAAM,CAAC,KAAOpB,EAAI0e,mBAAmB,MAAQ1e,EAAIqkB,gBAAgB5iB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0e,oBAAqB,MAAUte,EAAG,wBAAwB,CAACgB,MAAM,CAAC,KAAOpB,EAAI0qB,4BAA4B,SAAW,CAAE,KAAQ1qB,EAAI1B,OAAQmD,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0qB,6BAA8B,OAAW,IAAI,IAAI,IAC9qD,GAAkB,GCuCtB,MAAME,GAAe,CACnBnV,KAAM,SAAUlR,GACd,OAAO0R,EAAOtE,iBAAiBpN,EAAGgJ,OAAOqE,WAG3CqS,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAG3d,KAAO2d,EAAGrX,OAAO2I,OAAOqE,SAC3BqK,EAAG0O,gBAAkBle,EAASvQ,KAAK2L,SAIvC,QACEvJ,KAAM,eACNwpB,OAAQ,CAAChE,GAAyB8G,KAClCrlB,WAAY,CAAd,oFAEE,OACE,MAAO,CACLjH,KAAM,GACNqsB,gBAAiB,CAAvB,UACMjM,oBAAoB,EACpB2F,eAAgB,GAEhBqG,6BAA6B,IAIjC/lB,SAAU,CACR,aACE,MAAO,IAAI,IAAI6hB,IAAIvmB,KAAK0qB,gBAAgBhiB,MAC9C,gDAIEzD,QAAS,CACP6jB,YAAa,WACX9oB,KAAKye,oBAAqB,EAC1Bze,KAAKkF,QAAQnI,KAAK,CAAxB,qDAGI6X,KAAM,WACJoB,EAAOjH,uBAAuB,gBAAkB/O,KAAK3B,KAAO,6BAA6B,IAG3FshB,WAAY,SAAUpZ,GACpBvG,KAAKkF,QAAQnI,KAAK,CAAxB,8BAGIyhB,YAAa,SAAUjY,GACrBvG,KAAKokB,eAAiB7d,EACtBvG,KAAKye,oBAAqB,KC1FsT,MCOlV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI1e,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI4R,eAAexR,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0qB,6BAA8B,KAAQ,CAACtqB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,yCAAyCF,EAAG,IAAI,CAACE,YAAY,qCAAqCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACJ,EAAIoC,GAAG,mBAAmBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,oCAAoC,CAACF,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAIoqB,cAAc,CAACpqB,EAAIoC,GAAG,YAAYpC,EAAIoC,GAAG,MAAMpC,EAAImG,GAAGnG,EAAI4Z,OAAO2P,OAAO,aAAavpB,EAAI4G,GAAI5G,EAAgB,cAAE,SAASinB,EAAM9b,GAAO,OAAO/K,EAAG,kBAAkB,CAACf,IAAI4nB,EAAMpmB,GAAGO,MAAM,CAAC,MAAQ6lB,GAAOxlB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIknB,WAAW/b,MAAU,CAAC/K,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIye,YAAYwI,MAAU,CAAC7mB,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAKF,EAAG,qBAAqB,CAACgB,MAAM,CAAC,KAAOpB,EAAI0e,mBAAmB,MAAQ1e,EAAImnB,gBAAgB1lB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0e,oBAAqB,MAAUte,EAAG,wBAAwB,CAACgB,MAAM,CAAC,KAAOpB,EAAI0qB,4BAA4B,SAAW,CAAE,KAAQ1qB,EAAI4R,WAAYnQ,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0qB,6BAA8B,OAAW,IAAI,IAAI,IAC5qD,GAAkB,GCuCtB,MAAM,GAAN,CACEjV,KAAM,SAAUlR,GACd,OAAO0R,EAAOpE,wBAAwBtN,EAAGgJ,OAAOqE,WAGlDqS,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAGrK,SAAWqK,EAAGrX,OAAO2I,OAAOqE,SAC/BqK,EAAGrC,OAASnN,EAASvQ,KAAK0d,SAI9B,QACEtb,KAAM,qBACNwpB,OAAQ,CAAChE,GAAyB,KAClCve,WAAY,CAAd,mFAEE,OACE,MAAO,CACLqU,OAAQ,CAAd,UACMhI,SAAU,GAEViZ,WAAY,EAEZnM,oBAAoB,EACpByI,eAAgB,GAEhBuD,6BAA6B,IAIjC/lB,SAAU,CACR,aACE,MAAO,IAAI,IAAI6hB,IAAIvmB,KAAK2Z,OAAOjR,MACrC,gDAGI,eACE,OAAO1I,KAAK2Z,OAAOjR,MAAMoI,OAAOkW,GAASA,EAAMS,QAAUznB,KAAK4qB,cAIlE3lB,QAAS,CACPklB,YAAa,WACXnqB,KAAKye,oBAAqB,EAC1Bze,KAAKkF,QAAQnI,KAAK,CAAxB,yDAGI6X,KAAM,WACJoB,EAAOjH,uBAAuB,gBAAkB/O,KAAK2R,SAAW,6BAA6B,IAG/FsV,WAAY,SAAU5Y,GACpB2H,EAAOjH,uBAAuB,gBAAkB/O,KAAK2R,SAAW,6BAA6B,EAAOtD,IAGtGwc,YAAa,SAAUpD,GACN,KAAXA,IACFA,EAAS,GAEXznB,KAAK4qB,WAAiC,GAApBrD,KAAKuD,KAAKrD,IAG9BjJ,YAAa,SAAUwI,GACrBhnB,KAAKknB,eAAiBF,EACtBhnB,KAAKye,oBAAqB,KCxG4T,MCOxV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI1e,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAAEJ,EAAIgrB,aAAariB,MAAMjM,OAAS,EAAG0D,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,oBAAoBhC,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,IAAI,CAACE,YAAY,kBAAkBmB,GAAG,CAAC,MAAQzB,EAAIirB,kBAAkB,CAAC7qB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,qBAAqBF,EAAG,OAAO,CAACJ,EAAIoC,GAAG,2BAA2BhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACzZ,EAAI4G,GAAI5G,EAAIgrB,aAAkB,OAAE,SAAS/D,GAAO,OAAO7mB,EAAG,kBAAkB,CAACf,IAAI4nB,EAAMpmB,GAAGO,MAAM,CAAC,MAAQ6lB,GAAOxlB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIknB,WAAWD,MAAU,CAAC7mB,EAAG,WAAW,CAACqZ,KAAK,YAAY,CAACrZ,EAAG,eAAe,CAACE,YAAY,iBAAiBc,MAAM,CAAC,IAAM,IAAI,IAAM6lB,EAAM7G,UAAU,KAAO,IAAI,UAAW,EAAK,MAAQ6G,EAAM5P,YAAY,GAAGjX,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIkrB,kBAAkBjE,MAAU,CAAC7mB,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAKF,EAAG,qBAAqB,CAACgB,MAAM,CAAC,KAAOpB,EAAI+nB,yBAAyB,MAAQ/nB,EAAImnB,gBAAgB1lB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI+nB,0BAA2B,GAAO,qBAAqB/nB,EAAImrB,wBAAwB,IAAI,GAAGnrB,EAAI+B,KAAK3B,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,cAAchC,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI6H,OAAO0hB,OAAO,iBAAiBnpB,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAAEN,EAAI2Z,IAAIC,OAAS,EAAGxZ,EAAG,IAAI,CAACE,YAAY,kBAAkBmB,GAAG,CAAC,MAAQzB,EAAIorB,aAAa,CAAChrB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBF,EAAG,OAAO,CAACJ,EAAIoC,GAAG,cAAcpC,EAAI+B,KAAK3B,EAAG,IAAI,CAACE,YAAY,kBAAkBmB,GAAG,CAAC,MAAQzB,EAAIqrB,0BAA0B,CAACjrB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,kBAAkBF,EAAG,OAAO,CAACJ,EAAIoC,GAAG,uBAAuBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI6H,OAAOc,OAAOlH,GAAG,CAAC,qBAAqB,SAASC,GAAQ,OAAO1B,EAAImrB,uBAAuB,kBAAkB,SAASzpB,GAAQ,OAAO1B,EAAIsrB,sBAAsBlrB,EAAG,uBAAuB,CAACgB,MAAM,CAAC,KAAOpB,EAAI4e,gBAAgBnd,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI4e,gBAAiB,GAAO,gBAAgB,SAASld,GAAQ,OAAO1B,EAAIsrB,uBAAuB,IAAI,IAAI,IACz6E,GAAkB,GCDlB,GAAS,WAAa,IAAItrB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,8BAA8BhC,EAAG,OAAO,CAACqB,GAAG,CAAC,OAAS,SAASC,GAAgC,OAAxBA,EAAOY,iBAAwBtC,EAAI+gB,WAAW1jB,MAAM,KAAMsb,cAAc,CAACvY,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsC,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAO,IAAEuB,WAAW,QAAQuX,IAAI,YAAYxY,YAAY,sBAAsBc,MAAM,CAAC,KAAO,OAAO,YAAc,oBAAoB,SAAWpB,EAAI8G,SAASiS,SAAS,CAAC,MAAS/Y,EAAO,KAAGyB,GAAG,CAAC,MAAQ,SAASC,GAAWA,EAAOsX,OAAOC,YAAqBjZ,EAAIoS,IAAI1Q,EAAOsX,OAAOja,WAAUqB,EAAG,OAAO,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,oBAAoBF,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIoC,GAAG,4HAA6HpC,EAAW,QAAEI,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsC,CAACF,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,kBAAkBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,wBAAwBhC,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,mCAAmCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,YAAY,CAACrY,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,qBAAqBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,cAAchC,EAAG,IAAI,CAACE,YAAY,2EAA2EmB,GAAG,CAAC,MAAQzB,EAAI+gB,aAAa,CAAC3gB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,iBAAiBhC,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IACnuE,GAAkB,GC6CtB,IACEzD,KAAM,oBACNgG,MAAO,CAAC,QAER,OACE,MAAO,CACL8N,IAAK,GACLtL,SAAS,IAIb5B,QAAS,CACP6b,WAAY,WACV9gB,KAAK6G,SAAU,EACfmP,EAAO9D,YAAYlS,KAAKmS,KAAKhE,KAAK,KAChCnO,KAAKwY,MAAM,SACXxY,KAAKwY,MAAM,iBACXxY,KAAKmS,IAAM,KACnB,WACQnS,KAAK6G,SAAU,MAKrBb,MAAO,CACL,OACMhG,KAAKmZ,OACPnZ,KAAK6G,SAAU,EAGfwF,WAAW,KACTrM,KAAKoZ,MAAM2H,UAAUzH,SAC/B,QC9E2V,MCOvV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCkEf,MAAM,GAAN,CACE9D,KAAM,SAAUlR,GACd,OAAO0I,QAAQ4a,IAAI,CACvB,4BACA,qCAIE5D,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAGpU,OAAS4E,EAAS,GAAGvQ,KACxB+f,EAAG+O,aAAeve,EAAS,GAAGvQ,KAAK0d,SAIvC,QACEtb,KAAM,eACNwpB,OAAQ,CAAChE,GAAyB,KAClCve,WAAY,CAAd,gHAEE,OACE,MAAO,CACLsC,OAAQ,CAAd,UACMmjB,aAAc,CAApB,UAEMpM,gBAAgB,EAEhBmJ,0BAA0B,EAC1BZ,eAAgB,KAIpBxiB,SAAU,CACR,MACE,OAAO1E,KAAK8E,OAAOC,MAAMiD,YAI7B/C,QAAS,CACPgiB,WAAY,SAAUD,GACpBhR,EAAOtH,gBAAgBsY,EAAM/Y,KAAK,IAGpCgd,kBAAmB,SAAUjE,GAC3BhnB,KAAKknB,eAAiBF,EACtBhnB,KAAK8nB,0BAA2B,GAGlCkD,gBAAiB,WACfhrB,KAAK+qB,aAAariB,MAAM4iB,QAAQC,IAC9BvV,EAAOnD,qBAAqB0Y,EAAG3qB,GAAI,CAA3C,2BAEMZ,KAAK+qB,aAAariB,MAAQ,IAG5B0iB,wBAAyB,SAAU1hB,GACjC1J,KAAK2e,gBAAiB,GAGxBuM,oBAAqB,WACnBlV,EAAOjE,gCAAgC5D,KAAK,EAAlD,WACQnO,KAAK+qB,aAAe9uB,EAAK0d,UAI7B0R,gBAAiB,WACfrV,EAAOtF,eAAe,WAAWvC,KAAK,EAA5C,WACQnO,KAAK4H,OAAS3L,EACd+D,KAAKkrB,yBAITC,WAAY,WACVnrB,KAAK8E,OAAOE,OAAO,EAAzB,OACMhF,KAAK8E,OAAOE,OAAO,GAAzB,MC7JsV,MCOlV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIjF,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,MAAM,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAMlI,MAAM,SAAS8B,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIopB,0BAA2B,KAAQ,CAAChpB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,yCAAyCF,EAAG,IAAI,CAACE,YAAY,qCAAqCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBF,EAAG,OAAO,CAACJ,EAAIoC,GAAG,gBAAgBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,oCAAoC,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAM4e,aAAa,aAAaplB,EAAI4G,GAAI5G,EAAU,QAAE,SAASinB,GAAO,OAAO7mB,EAAG,kBAAkB,CAACf,IAAI4nB,EAAMpmB,GAAGO,MAAM,CAAC,MAAQ6lB,GAAOxlB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIknB,WAAWD,MAAU,CAAC7mB,EAAG,WAAW,CAACqZ,KAAK,YAAY,CAACrZ,EAAG,eAAe,CAACE,YAAY,iBAAiBc,MAAM,CAAC,IAAM,IAAI,IAAM6lB,EAAM7G,UAAU,KAAO,IAAI,UAAW,EAAK,MAAQ6G,EAAM5P,YAAY,GAAGjX,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIye,YAAYwI,MAAU,CAAC7mB,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAKF,EAAG,qBAAqB,CAACgB,MAAM,CAAC,KAAOpB,EAAI0e,mBAAmB,MAAQ1e,EAAImnB,gBAAgB1lB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0e,oBAAqB,GAAO,qBAAqB1e,EAAIyrB,iBAAiBrrB,EAAG,qBAAqB,CAACgB,MAAM,CAAC,KAAOpB,EAAIopB,yBAAyB,MAAQppB,EAAIwG,MAAM,WAAa,UAAU,WAAaxG,EAAI0rB,YAAYjqB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIopB,0BAA2B,GAAO,qBAAqBppB,EAAIyrB,cAAc,iBAAiBzrB,EAAIskB,8BAA8BlkB,EAAG,eAAe,CAACgB,MAAM,CAAC,KAAOpB,EAAIwkB,0BAA0B,MAAQ,iBAAiB,cAAgB,UAAU/iB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIwkB,2BAA4B,GAAO,OAASxkB,EAAIykB,iBAAiB,CAACrkB,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,IAAI,CAACJ,EAAIoC,GAAG,wDAAwDhC,EAAG,IAAI,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,4CAA4ChC,EAAG,IAAI,CAACJ,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI0kB,uBAAuBpmB,SAAS0B,EAAIoC,GAAG,WAAW,IAAI,IAAI,IAC11E,GAAkB,GC2EtB,MAAM,GAAN,CACEqT,KAAM,SAAUlR,GACd,OAAO0I,QAAQ4a,IAAI,CACvB,mCACA,iDAIE5D,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAGzV,MAAQiG,EAAS,GAAGvQ,KACvB+f,EAAGrC,OAASnN,EAAS,GAAGvQ,KAAK0d,OAAOjR,QAIxC,QACErK,KAAM,cACNwpB,OAAQ,CAAChE,GAAyB,KAClCve,WAAY,CAAd,gHAEE,OACE,MAAO,CACLiB,MAAO,GACPoT,OAAQ,GAER8E,oBAAoB,EACpByI,eAAgB,GAEhBiC,0BAA0B,EAE1B5E,2BAA2B,EAC3BE,uBAAwB,KAI5B/f,SAAU,CACR,aACE,OAAO1E,KAAK2Z,OAAO7I,OAAOkW,GAA8B,IAArBA,EAAMK,YAAkB5qB,SAI/DwI,QAAS,CACP2P,KAAM,WACJoB,EAAOtH,gBAAgB1O,KAAKuG,MAAM0H,KAAK,IAGzCgZ,WAAY,SAAUD,GACpBhR,EAAOtH,gBAAgBsY,EAAM/Y,KAAK,IAGpCuQ,YAAa,SAAUwI,GACrBhnB,KAAKknB,eAAiBF,EACtBhnB,KAAKye,oBAAqB,GAG5B4F,2BAA4B,WAC1BrkB,KAAKmpB,0BAA2B,EAChCnT,EAAOpD,wBAAwB5S,KAAK2Z,OAAO,GAAG/Y,IAAIuN,KAAK,EAA7D,WACQ,MAAM2Y,EAAe7qB,EAAKyM,MAAMoI,OAAOiW,GAAkB,QAAZA,EAAG7a,MACpB,IAAxB4a,EAAarqB,QAKjBuD,KAAKykB,uBAAyBqC,EAAa,GAC3C9mB,KAAKukB,2BAA4B,GAL/BvkB,KAAK8E,OAAOgI,SAAS,mBAAoB,CAAnD,mGASI0X,eAAgB,WACdxkB,KAAKukB,2BAA4B,EACjCvO,EAAO5D,wBAAwBpS,KAAKykB,uBAAuB7jB,IAAIuN,KAAK,KAClEnO,KAAKkF,QAAQ2d,QAAQ,CAA7B,sBAII2I,cAAe,WACbxV,EAAO/D,yBAAyBjS,KAAKuG,MAAM3F,IAAIuN,KAAK,EAA1D,WACQnO,KAAK2Z,OAAS1d,EAAK0d,OAAOjR,WCzJmT,MCOjV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI3I,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,mBAAmBA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,oBAAoB,CAACgB,MAAM,CAAC,MAAQpB,EAAI6mB,YAAYhB,cAAc,GAAGzlB,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,gBAAgBhC,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI6mB,YAAYjB,kBAAkBlpB,QAAQ,mBAAmB0D,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI6mB,gBAAgB,IAAI,IAAI,IACviB,GAAkB,GCDlB,GAAS,WAAa,IAAI7mB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACE,YAAY,2BAA2B,CAACF,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACF,EAAG,KAAK,CAACA,EAAG,cAAc,CAACgB,MAAM,CAAC,IAAM,KAAK,GAAK,sBAAsB,eAAe,cAAc,CAAChB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,iBAAiB,CAACF,EAAG,IAAI,CAACE,YAAY,qBAAqBF,EAAG,OAAO,GAAG,CAACJ,EAAIoC,GAAG,iBAAiBhC,EAAG,cAAc,CAACgB,MAAM,CAAC,IAAM,KAAK,GAAK,qBAAqB,eAAe,cAAc,CAAChB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,iBAAiB,CAACF,EAAG,IAAI,CAACE,YAAY,oBAAoBF,EAAG,OAAO,GAAG,CAACJ,EAAIoC,GAAG,qBAAqB,cAC7wB,GAAkB,GC2BtB,IACE9D,KAAM,kBC7BgV,MCOpV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCUf,MAAM,GAAN,CACEmX,KAAM,SAAUlR,GACd,OAAO0R,EAAOtF,eAAe,cAG/BsT,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAGpU,OAAS4E,EAASvQ,OAIzB,QACEoC,KAAM,uBACNwpB,OAAQ,CAAChE,GAAyB,KAClCve,WAAY,CAAd,0EAEE,OACE,MAAO,CACLsC,OAAQ,CAAd,YAIElD,SAAU,CACR,cACE,OAAO,IAAI8gB,GAAOxlB,KAAK4H,OAAOc,MAAO,CACnC+C,KAAM,OACNia,OAAO,MAKbzgB,QAAS,IC1DmV,MCO1V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIlF,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,mBAAmBA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,oBAAoB,CAACgB,MAAM,CAAC,MAAQpB,EAAIgoB,aAAanC,cAAc,GAAGzlB,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,aAAahC,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIgoB,aAAapC,kBAAkBlpB,QAAQ,gBAAgB0D,EAAG,WAAW,CAACqZ,KAAK,kBAAkBrZ,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,eAAe,CAACgB,MAAM,CAAC,QAAUpB,EAAIgoB,iBAAiB,IAAI,IAAI,IAC5kB,GAAkB,GC6BtB,MAAM,GAAN,CACEvS,KAAM,SAAUlR,GACd,OAAO0R,EAAO3F,gBAAgB,cAGhC2T,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAGrU,QAAU6E,EAASvQ,OAI1B,QACEoC,KAAM,wBACNwpB,OAAQ,CAAChE,GAAyB,KAClCve,WAAY,CAAd,2EAEE,OACE,MAAO,CACLqC,QAAS,CAAf,YAIEjD,SAAU,CACR,eACE,OAAO,IAAI4jB,GAAQtoB,KAAK2H,QAAQe,MAAO,CACrC+C,KAAM,OACNia,OAAO,MAKbzgB,QAAS,IC5DoV,MCO3V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIlF,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsG,OAAOhI,WAAW8B,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI8oB,2BAA4B,KAAQ,CAAC1oB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,yCAAyCF,EAAG,IAAI,CAACE,YAAY,qCAAqCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACJ,EAAIoC,GAAG,mBAAmBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,oCAAoC,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsG,OAAOgiB,aAAa,aAAaloB,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI6H,OAAOc,SAASvI,EAAG,sBAAsB,CAACgB,MAAM,CAAC,KAAOpB,EAAI8oB,0BAA0B,OAAS9oB,EAAIsG,QAAQ7E,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI8oB,2BAA4B,OAAW,IAAI,IACtkC,GAAkB,GC6BtB,MAAM,GAAN,CACErT,KAAM,SAAUlR,GACd,OAAO0I,QAAQ4a,IAAI,CACvB,qCACA,+CAIE5D,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAG3V,OAASmG,EAAS,GAAGvQ,KACxB+f,EAAGpU,OAAS4E,EAAS,GAAGvQ,OAI5B,QACEoC,KAAM,uBACNwpB,OAAQ,CAAChE,GAAyB,KAClCve,WAAY,CAAd,0DAEE,OACE,MAAO,CACLe,OAAQ,GACRuB,OAAQ,GAERihB,2BAA2B,IAI/B5jB,QAAS,CACP2P,KAAM,WACJoB,EAAOtH,gBAAgB1O,KAAK4H,OAAOc,MAAMjI,IAAI0X,GAAKA,EAAElK,KAAK+a,KAAK,MAAM,MC5DoR,MCO1V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIjpB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,oBAAoB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAMlI,SAAS8B,EAAG,KAAK,CAACE,YAAY,sDAAsD,CAACF,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAImlB,cAAc,CAACnlB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAMF,aAAalG,EAAG,MAAM,CAACE,YAAY,mDAAmD,CAACF,EAAG,IAAI,CAACE,YAAY,qCAAqCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACJ,EAAIoC,GAAG,YAAYhC,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIopB,0BAA2B,KAAQ,CAAChpB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,6CAA6CF,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,IAAI,CAACE,YAAY,+CAA+C,CAACF,EAAG,gBAAgB,CAACgB,MAAM,CAAC,YAAcpB,EAAIwG,MAAMkb,YAAY,OAAS1hB,EAAIwG,MAAMF,OAAO,MAAQtG,EAAIwG,MAAMlI,MAAMmD,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIopB,0BAA2B,OAAU,KAAKhpB,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,2DAA2D,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAM4e,aAAa,aAAahlB,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI4Z,OAAO,KAAO5Z,EAAIwG,MAAM0H,OAAO9N,EAAG,qBAAqB,CAACgB,MAAM,CAAC,KAAOpB,EAAIopB,yBAAyB,MAAQppB,EAAIwG,MAAM,WAAa,aAAa/E,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIopB,0BAA2B,OAAW,IAAI,IACtkD,GAAkB,GCuCtB,MAAM,GAAN,CACE3T,KAAM,SAAUlR,GACd,OAAO0I,QAAQ4a,IAAI,CACvB,mCACA,6CAIE5D,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAGzV,MAAQiG,EAAS,GAAGvQ,KACvB+f,EAAGrC,OAASnN,EAAS,GAAGvQ,KAAKyM,QAIjC,QACErK,KAAM,sBACNwpB,OAAQ,CAAChE,GAAyB,KAClCve,WAAY,CAAd,iFAEE,OACE,MAAO,CACLiB,MAAO,GACPoT,OAAQ,GAERwP,0BAA0B,IAI9BlkB,QAAS,CACPigB,YAAa,WACXllB,KAAKye,oBAAqB,EAC1Bze,KAAKkF,QAAQnI,KAAK,CAAxB,oDAGI6X,KAAM,WACJoB,EAAOtH,gBAAgB1O,KAAKuG,MAAM0H,KAAK,IAGzCgZ,WAAY,SAAU5Y,GACpB2H,EAAOtH,gBAAgB1O,KAAKuG,MAAM0H,KAAK,EAAOI,IAGhDmQ,YAAa,SAAUwI,GACrBhnB,KAAKknB,eAAiBF,EACtBhnB,KAAKye,oBAAqB,KCpF6T,MCOzV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI1e,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2rB,SAASrtB,SAAS8B,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI4rB,UAAUrC,OAAO,kBAAkBnpB,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,iBAAiB,CAACgB,MAAM,CAAC,UAAYpB,EAAI4rB,UAAUjjB,UAAU,IAAI,IAC5Z,GAAkB,GCDlB,GAAS,WAAa,IAAI3I,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACJ,EAAI4G,GAAI5G,EAAa,WAAE,SAAS2rB,GAAU,OAAOvrB,EAAG,qBAAqB,CAACf,IAAIssB,EAAS9qB,GAAGO,MAAM,CAAC,SAAWuqB,GAAUlqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAI6rB,cAAcF,MAAa,CAACvrB,EAAG,WAAW,CAACqZ,KAAK,QAAQ,CAACrZ,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,MAAM0B,MAAM,CAAE,oBAAuC,WAAlB2pB,EAASxf,KAAmB,UAA6B,QAAlBwf,EAASxf,KAAgB,aAAgC,WAAlBwf,EAASxf,YAA0B/L,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIye,YAAYkN,MAAa,CAACvrB,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAKF,EAAG,wBAAwB,CAACgB,MAAM,CAAC,KAAOpB,EAAI0e,mBAAmB,SAAW1e,EAAI8rB,mBAAmBrqB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0e,oBAAqB,OAAW,IACp4B,GAAkB,GCDlB,GAAS,SAAUxe,EAAGF,GAAM,IAAII,EAAGJ,EAAII,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,SAAS,CAAEN,EAAIonB,QAAY,KAAEhnB,EAAG,SAAS,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAI8kB,UAAUC,QAAQ,CAAC/kB,EAAIQ,GAAG,SAAS,GAAGR,EAAI+B,KAAK3B,EAAG,MAAM,CAACE,YAAY,yCAAyCmB,GAAG,CAAC,MAAQzB,EAAI8kB,UAAUC,QAAQ,CAAC3kB,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsE,MAAMqnB,SAASrtB,WAAW8B,EAAG,MAAM,CAACE,YAAY,eAAe,CAACN,EAAIQ,GAAG,YAAY,MAClc,GAAkB,GCctB,IACElC,KAAM,mBACNgG,MAAO,CAAC,aCjBgV,MCOtV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAItE,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAI6rB,gBAAgB,CAAC7rB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2rB,SAASrtB,WAAW8B,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,UAAUhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2rB,SAAS9mB,WAAWzE,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,UAAUhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2rB,SAASxf,eAAiBnM,EAAI2rB,SAASI,OAA+tB/rB,EAAI+B,KAA3tB3B,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIiO,YAAY,CAAC7N,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIqO,iBAAiB,CAACjO,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,gBAAgBhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,kBAA2BhC,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IAClwD,GAAkB,GC2CtB,IACEzD,KAAM,sBACNgG,MAAO,CAAC,OAAQ,WAAY,QAE5BY,QAAS,CACP2P,KAAM,WACJ5U,KAAKwY,MAAM,SACXxC,EAAOtH,gBAAgB1O,KAAK2O,KAAO3O,KAAK2O,KAAO3O,KAAK0rB,SAASzd,KAAK,IAGpED,UAAW,WACThO,KAAKwY,MAAM,SACXxC,EAAOhI,UAAUhO,KAAK2O,KAAO3O,KAAK2O,KAAO3O,KAAK0rB,SAASzd,MAGzDG,eAAgB,WACdpO,KAAKwY,MAAM,SACXxC,EAAO5H,eAAepO,KAAK2O,KAAO3O,KAAK2O,KAAO3O,KAAK0rB,SAASzd,MAG9D2d,cAAe,WACb5rB,KAAKwY,MAAM,SACXxY,KAAKkF,QAAQnI,KAAK,CAAxB,mDClE6V,MCOzV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCIf,IACEsB,KAAM,gBACNiH,WAAY,CAAd,4CAEEjB,MAAO,CAAC,aAER,OACE,MAAO,CACLoa,oBAAoB,EACpBoN,kBAAmB,KAIvB5mB,QAAS,CACP2mB,cAAe,SAAUF,GACD,WAAlBA,EAASxf,KACXlM,KAAKkF,QAAQnI,KAAK,CAA1B,oCAEQiD,KAAKkF,QAAQnI,KAAK,CAA1B,2BAIIyhB,YAAa,SAAUkN,GACrB1rB,KAAK6rB,kBAAoBH,EACzB1rB,KAAKye,oBAAqB,KC9CuT,MCOnV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCAf,MAAMsN,GAAgB,CACpBvW,KAAM,SAAUlR,GACd,OAAO0I,QAAQ4a,IAAI,CACvB,yCACA,mDAIE5D,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAG0P,SAAWlf,EAAS,GAAGvQ,KAC1B+f,EAAG2P,UAAYnf,EAAS,GAAGvQ,OAI/B,QACEoC,KAAM,gBACNwpB,OAAQ,CAAChE,GAAyBkI,KAClCzmB,WAAY,CAAd,wCAEE,OACE,MAAO,CACLomB,SAAU,GACVC,UAAW,MCxCsU,MCOnV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI5rB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,MAAM,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2rB,SAASrtB,WAAW8B,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIisB,6BAA8B,KAAQ,CAAC7rB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,yCAAyCF,EAAG,IAAI,CAACE,YAAY,qCAAqCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACJ,EAAIoC,GAAG,mBAAmBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,oCAAoC,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI4Z,OAAOld,QAAQ,aAAa0D,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI4Z,OAAO,KAAO5Z,EAAI4O,QAAQxO,EAAG,wBAAwB,CAACgB,MAAM,CAAC,KAAOpB,EAAIisB,4BAA4B,SAAWjsB,EAAI2rB,SAAS,KAAO3rB,EAAI4O,MAAMnN,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIisB,6BAA8B,OAAW,IAAI,IAC9mC,GAAkB,GC6BtB,MAAMC,GAAe,CACnBzW,KAAM,SAAUlR,GACd,OAAO0I,QAAQ4a,IAAI,CACvB,yCACA,mDAIE5D,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAG0P,SAAWlf,EAAS,GAAGvQ,KAC1B+f,EAAGrC,OAASnN,EAAS,GAAGvQ,KAAKyM,QAIjC,QACErK,KAAM,eACNwpB,OAAQ,CAAChE,GAAyBoI,KAClC3mB,WAAY,CAAd,4DAEE,OACE,MAAO,CACLomB,SAAU,GACV/R,OAAQ,GAERqS,6BAA6B,IAIjCtnB,SAAU,CACR,OACE,OAAI1E,KAAK0rB,SAASQ,OACTlsB,KAAK2Z,OAAOlZ,IAAI0X,GAAKA,EAAElK,KAAK+a,KAAK,KAEnChpB,KAAK0rB,SAASzd,MAIzBhJ,QAAS,CACP2P,KAAM,WACJoB,EAAOtH,gBAAgB1O,KAAK2O,MAAM,MCrE8S,MCOlV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI5O,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,4BAA4B,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIosB,wBAAwBhsB,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIqsB,sBAAsB,CAAE,KAAQrsB,EAAIosB,uBAAwB,CAAChsB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,yCAAyCF,EAAG,IAAI,CAACE,YAAY,qCAAqCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACJ,EAAIoC,GAAG,gBAAgBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAAEzZ,EAAI4E,OAAO0G,MAAe,UAAElL,EAAG,MAAM,CAACE,YAAY,QAAQmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIssB,2BAA2B,CAAClsB,EAAG,SAAS,CAACE,YAAY,4BAA4B,CAACF,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,wCAAwCF,EAAG,MAAM,CAACE,YAAY,0CAA0C,CAACF,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,UAAUhC,EAAG,MAAM,CAACE,YAAY,eAAe,CAACN,EAAIQ,GAAG,YAAY,KAAKR,EAAI+B,KAAK/B,EAAI4G,GAAI5G,EAAIusB,MAAiB,aAAE,SAASvZ,GAAW,OAAO5S,EAAG,sBAAsB,CAACf,IAAI2T,EAAUnO,KAAKzD,MAAM,CAAC,UAAY4R,GAAWvR,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIwsB,eAAexZ,MAAc,CAAC5S,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIqsB,sBAAsBrZ,MAAc,CAAC5S,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAKN,EAAI4G,GAAI5G,EAAIusB,MAAMX,UAAe,OAAE,SAASD,GAAU,OAAOvrB,EAAG,qBAAqB,CAACf,IAAIssB,EAAS9qB,GAAGO,MAAM,CAAC,SAAWuqB,GAAUlqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAI6rB,cAAcF,MAAa,CAACvrB,EAAG,WAAW,CAACqZ,KAAK,QAAQ,CAACrZ,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,8BAA8BF,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIysB,qBAAqBd,MAAa,CAACvrB,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAKN,EAAI4G,GAAI5G,EAAIusB,MAAM3S,OAAY,OAAE,SAASqN,EAAM9b,GAAO,OAAO/K,EAAG,kBAAkB,CAACf,IAAI4nB,EAAMpmB,GAAGO,MAAM,CAAC,MAAQ6lB,GAAOxlB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIknB,WAAW/b,MAAU,CAAC/K,EAAG,WAAW,CAACqZ,KAAK,QAAQ,CAACrZ,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,6BAA6BF,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIkrB,kBAAkBjE,MAAU,CAAC7mB,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAKF,EAAG,yBAAyB,CAACgB,MAAM,CAAC,KAAOpB,EAAI0sB,6BAA6B,UAAY1sB,EAAI2sB,oBAAoBlrB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0sB,8BAA+B,MAAUtsB,EAAG,wBAAwB,CAACgB,MAAM,CAAC,KAAOpB,EAAIisB,4BAA4B,SAAWjsB,EAAI8rB,mBAAmBrqB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIisB,6BAA8B,MAAU7rB,EAAG,qBAAqB,CAACgB,MAAM,CAAC,KAAOpB,EAAI+nB,yBAAyB,MAAQ/nB,EAAImnB,gBAAgB1lB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI+nB,0BAA2B,OAAW,IAAI,IAAI,IAClyG,GAAkB,GCDlB,GAAS,SAAU7nB,EAAGF,GAAM,IAAII,EAAGJ,EAAII,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,SAAS,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAI8kB,UAAUC,QAAQ,CAAC/kB,EAAImC,GAAG,KAAK/B,EAAG,MAAM,CAACE,YAAY,yCAAyCmB,GAAG,CAAC,MAAQzB,EAAI8kB,UAAUC,QAAQ,CAAC3kB,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsE,MAAM0O,UAAUnO,KAAK8d,UAAU3iB,EAAIsE,MAAM0O,UAAUnO,KAAKic,YAAY,KAAO,OAAO1gB,EAAG,KAAK,CAACE,YAAY,qCAAqC,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsE,MAAM0O,UAAUnO,WAAWzE,EAAG,MAAM,CAACE,YAAY,eAAe,CAACN,EAAIQ,GAAG,YAAY,MAC/jB,GAAkB,CAAC,SAAUN,EAAGF,GAAM,IAAII,EAAGJ,EAAII,GAAG,OAAOA,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,uBCiBnH,IACEhC,KAAM,oBACNgG,MAAO,CAAC,cCpBiV,MCOvV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAItE,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAIgT,UAAUnO,MAAM,SAASzE,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIiO,YAAY,CAAC7N,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIqO,iBAAiB,CAACjO,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,gBAAgBhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IACv2C,GAAkB,GCiCtB,IACEzD,KAAM,uBACNgG,MAAO,CAAC,OAAQ,aAEhBY,QAAS,CACP2P,KAAM,WACJ5U,KAAKwY,MAAM,SACXxC,EAAOjH,uBAAuB,qBAAuB/O,KAAK+S,UAAUnO,KAAO,uBAAuB,IAGpGoJ,UAAW,WACThO,KAAKwY,MAAM,SACXxC,EAAO1H,qBAAqB,qBAAuBtO,KAAK+S,UAAUnO,KAAO,wBAG3EwJ,eAAgB,WACdpO,KAAKwY,MAAM,SACXxC,EAAOzH,0BAA0B,qBAAuBvO,KAAK+S,UAAUnO,KAAO,0BCnD0Q,MCO1V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCmEf,MAAM+nB,GAAY,CAChBnX,KAAM,SAAUlR,GACd,OAAIA,EAAG+G,MAAM0H,UACJiD,EAAOlD,cAAcxO,EAAG+G,MAAM0H,WAEhC/F,QAAQ9L,WAGjB8iB,IAAK,SAAUhI,EAAIxP,GAEfwP,EAAGsQ,MADD9f,EACSA,EAASvQ,KAET,CACT2wB,YAAa5Q,EAAGlX,OAAOC,MAAMW,OAAOknB,YAAYnsB,IAAIosB,IAA5D,WACQlT,OAAQ,CAAhB,UACQgS,UAAW,CAAnB,aAMA,QACEttB,KAAM,YACNwpB,OAAQ,CAAChE,GAAyB8I,KAClCrnB,WAAY,CAAd,oJAEE,OACE,MAAO,CACLgnB,MAAO,CAAb,uDAEMG,8BAA8B,EAC9BC,mBAAoB,GAEpBV,6BAA6B,EAC7BH,kBAAmB,GAEnB/D,0BAA0B,EAC1BZ,eAAgB,KAIpBxiB,SAAU,CACR,oBACE,OAAI1E,KAAK2E,OAAO0G,OAASrL,KAAK2E,OAAO0G,MAAM0H,UAClC/S,KAAK2E,OAAO0G,MAAM0H,UAEpB,MAIX9N,QAAS,CACPonB,sBAAuB,WACrB,MAAMS,EAAS9sB,KAAKmsB,kBAAkBtsB,MAAM,EAAGG,KAAKmsB,kBAAkBtL,YAAY,MACnE,KAAXiM,GAAiB9sB,KAAK8E,OAAOC,MAAMW,OAAOknB,YAAY9Y,SAAS9T,KAAKmsB,mBACtEnsB,KAAKkF,QAAQnI,KAAK,CAA1B,gBAEQiD,KAAKkF,QAAQnI,KAAK,CAA1B,2GAIIwvB,eAAgB,SAAUxZ,GACxB/S,KAAKkF,QAAQnI,KAAK,CAAxB,0CAGIqvB,sBAAuB,SAAUrZ,GAC/B/S,KAAK0sB,mBAAqB3Z,EAC1B/S,KAAKysB,8BAA+B,GAGtC7X,KAAM,WACJoB,EAAOjH,uBAAuB,qBAAuB/O,KAAKmsB,kBAAoB,uBAAuB,IAGvGlF,WAAY,SAAU5Y,GACpB2H,EAAOtH,gBAAgB1O,KAAKssB,MAAM3S,OAAOjR,MAAMjI,IAAI0X,GAAKA,EAAElK,KAAK+a,KAAK,MAAM,EAAO3a,IAGnF4c,kBAAmB,SAAUjE,GAC3BhnB,KAAKknB,eAAiBF,EACtBhnB,KAAK8nB,0BAA2B,GAGlC8D,cAAe,SAAUF,GACvB1rB,KAAKkF,QAAQnI,KAAK,CAAxB,qCAGIyvB,qBAAsB,SAAUd,GAC9B1rB,KAAK6rB,kBAAoBH,EACzB1rB,KAAKgsB,6BAA8B,KC7K0S,MCO/U,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIjsB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,aAAahC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,oCAAoC,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI4Z,OAAO2P,OAAO,aAAanpB,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI4Z,OAAOjR,UAAU,IAAI,IAAI,IACla,GAAkB,GCmBtB,MAAMqkB,GAAc,CAClBvX,KAAM,SAAUlR,GACd,OAAO0R,EAAOxE,yBAGhBwS,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAGrC,OAASnN,EAASvQ,KAAK0d,SAI9B,QACEtb,KAAM,mBACNwpB,OAAQ,CAAChE,GAAyBkJ,KAClCznB,WAAY,CAAd,qCAEE,OACE,MAAO,CACLqU,OAAQ,CAAd,aCrC0V,MCOtV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI5Z,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,UAAU,CAACE,YAAY,oCAAoC,CAACF,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,OAAO,CAACqB,GAAG,CAAC,OAAS,SAASC,GAAgC,OAAxBA,EAAOY,iBAAwBtC,EAAIitB,WAAW5vB,MAAM,KAAMsb,cAAc,CAACvY,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsC,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAgB,aAAEuB,WAAW,iBAAiBuX,IAAI,eAAexY,YAAY,iCAAiCc,MAAM,CAAC,KAAO,OAAO,YAAc,SAAS,aAAe,OAAO2X,SAAS,CAAC,MAAS/Y,EAAgB,cAAGyB,GAAG,CAAC,MAAQ,SAASC,GAAWA,EAAOsX,OAAOC,YAAqBjZ,EAAIktB,aAAaxrB,EAAOsX,OAAOja,WAAUiB,EAAImC,GAAG,KAAKnC,EAAImC,GAAG,OAAO/B,EAAG,MAAM,CAACE,YAAY,OAAOC,YAAY,CAAC,aAAa,SAASP,EAAI4G,GAAI5G,EAAmB,iBAAE,SAASmtB,GAAe,OAAO/sB,EAAG,IAAI,CAACf,IAAI8tB,EAAc7sB,YAAY,MAAMmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIotB,mBAAmBD,MAAkB,CAACntB,EAAIoC,GAAGpC,EAAImG,GAAGgnB,SAAoB,WAAW/sB,EAAG,cAAc,CAACgB,MAAM,CAAC,MAAQpB,EAAIktB,gBAAiBltB,EAAIqtB,aAAertB,EAAI4Z,OAAO2P,MAAOnpB,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,cAAchC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI4Z,OAAOjR,UAAU,GAAGvI,EAAG,WAAW,CAACqZ,KAAK,UAAU,CAAEzZ,EAA0B,uBAAEI,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQzB,EAAIstB,qBAAqB,CAACttB,EAAIoC,GAAG,YAAYpC,EAAImG,GAAGnG,EAAI4Z,OAAO2P,MAAMgE,kBAAkB,iBAAiBvtB,EAAI+B,QAAQ,GAAG/B,EAAI+B,KAAM/B,EAAIqtB,cAAgBrtB,EAAI4Z,OAAO2P,MAAOnpB,EAAG,eAAe,CAACE,YAAY,QAAQ,CAACF,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACA,EAAG,IAAI,CAACJ,EAAIoC,GAAG,0BAA0B,GAAGpC,EAAI+B,KAAM/B,EAAIwtB,cAAgBxtB,EAAI4H,QAAQ2hB,MAAOnpB,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,eAAehC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,eAAe,CAACgB,MAAM,CAAC,QAAUpB,EAAI4H,QAAQe,UAAU,GAAGvI,EAAG,WAAW,CAACqZ,KAAK,UAAU,CAAEzZ,EAA2B,wBAAEI,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQzB,EAAIytB,sBAAsB,CAACztB,EAAIoC,GAAG,YAAYpC,EAAImG,GAAGnG,EAAI4H,QAAQ2hB,MAAMgE,kBAAkB,kBAAkBvtB,EAAI+B,QAAQ,GAAG/B,EAAI+B,KAAM/B,EAAIwtB,eAAiBxtB,EAAI4H,QAAQ2hB,MAAOnpB,EAAG,eAAe,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACA,EAAG,IAAI,CAACJ,EAAIoC,GAAG,2BAA2B,GAAGpC,EAAI+B,KAAM/B,EAAI0tB,aAAe1tB,EAAI6H,OAAO0hB,MAAOnpB,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,cAAchC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAI6H,OAAOc,UAAU,GAAGvI,EAAG,WAAW,CAACqZ,KAAK,UAAU,CAAEzZ,EAA0B,uBAAEI,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQzB,EAAI2tB,qBAAqB,CAAC3tB,EAAIoC,GAAG,YAAYpC,EAAImG,GAAGnG,EAAI6H,OAAO0hB,MAAMgE,kBAAkB,iBAAiBvtB,EAAI+B,QAAQ,GAAG/B,EAAI+B,KAAM/B,EAAI0tB,cAAgB1tB,EAAI6H,OAAO0hB,MAAOnpB,EAAG,eAAe,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACA,EAAG,IAAI,CAACJ,EAAIoC,GAAG,0BAA0B,GAAGpC,EAAI+B,KAAM/B,EAAI4tB,gBAAkB5tB,EAAIiqB,UAAUV,MAAOnpB,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,iBAAiBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,iBAAiB,CAACgB,MAAM,CAAC,UAAYpB,EAAIiqB,UAAUthB,UAAU,GAAGvI,EAAG,WAAW,CAACqZ,KAAK,UAAU,CAAEzZ,EAA6B,0BAAEI,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQzB,EAAI6tB,wBAAwB,CAAC7tB,EAAIoC,GAAG,YAAYpC,EAAImG,GAAGnG,EAAIiqB,UAAUV,OAAO,oBAAoBvpB,EAAI+B,QAAQ,GAAG/B,EAAI+B,KAAM/B,EAAI4tB,iBAAmB5tB,EAAIiqB,UAAUV,MAAOnpB,EAAG,eAAe,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACA,EAAG,IAAI,CAACJ,EAAIoC,GAAG,6BAA6B,GAAGpC,EAAI+B,KAAM/B,EAAI8tB,gBAAkB9tB,EAAI4rB,UAAUrC,MAAOnpB,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,iBAAiBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,iBAAiB,CAACgB,MAAM,CAAC,UAAYpB,EAAI4rB,UAAUjjB,UAAU,GAAGvI,EAAG,WAAW,CAACqZ,KAAK,UAAU,CAAEzZ,EAA6B,0BAAEI,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQzB,EAAI+tB,wBAAwB,CAAC/tB,EAAIoC,GAAG,YAAYpC,EAAImG,GAAGnG,EAAI4rB,UAAUrC,MAAMgE,kBAAkB,oBAAoBvtB,EAAI+B,QAAQ,GAAG/B,EAAI+B,KAAM/B,EAAI8tB,iBAAmB9tB,EAAI4rB,UAAUrC,MAAOnpB,EAAG,eAAe,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACA,EAAG,IAAI,CAACJ,EAAIoC,GAAG,6BAA6B,GAAGpC,EAAI+B,KAAM/B,EAAIguB,eAAiBhuB,EAAIiuB,SAAS1E,MAAOnpB,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,gBAAgBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAIiuB,SAAStlB,UAAU,GAAGvI,EAAG,WAAW,CAACqZ,KAAK,UAAU,CAAEzZ,EAA4B,yBAAEI,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQzB,EAAIkuB,uBAAuB,CAACluB,EAAIoC,GAAG,YAAYpC,EAAImG,GAAGnG,EAAIiuB,SAAS1E,MAAMgE,kBAAkB,mBAAmBvtB,EAAI+B,QAAQ,GAAG/B,EAAI+B,KAAM/B,EAAIguB,gBAAkBhuB,EAAIiuB,SAAS1E,MAAOnpB,EAAG,eAAe,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACA,EAAG,IAAI,CAACJ,EAAIoC,GAAG,4BAA4B,GAAGpC,EAAI+B,KAAM/B,EAAImuB,iBAAmBnuB,EAAIouB,WAAW7E,MAAOnpB,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,cAAc,CAACgB,MAAM,CAAC,OAASpB,EAAIouB,WAAWzlB,UAAU,GAAGvI,EAAG,WAAW,CAACqZ,KAAK,UAAU,CAAEzZ,EAA8B,2BAAEI,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQzB,EAAIquB,yBAAyB,CAACruB,EAAIoC,GAAG,YAAYpC,EAAImG,GAAGnG,EAAIouB,WAAW7E,MAAMgE,kBAAkB,qBAAqBvtB,EAAI+B,QAAQ,GAAG/B,EAAI+B,KAAM/B,EAAImuB,kBAAoBnuB,EAAIouB,WAAW7E,MAAOnpB,EAAG,eAAe,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACA,EAAG,IAAI,CAACJ,EAAIoC,GAAG,8BAA8B,GAAGpC,EAAI+B,MAAM,IACr1M,GAAkB,CAAC,WAAa,IAAI/B,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,OAAO,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,uBAAuB,WAAa,IAAIN,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,IAAI,CAACE,YAAY,0BAA0B,CAACN,EAAIoC,GAAG,2DAA2DhC,EAAG,IAAI,CAACgB,MAAM,CAAC,KAAO,0EAA0E,OAAS,WAAW,CAACpB,EAAIoC,GAAG,gBAAgBpC,EAAIoC,GAAG,2BAA2BhC,EAAG,OAAO,CAACJ,EAAIoC,GAAG,YAAYpC,EAAIoC,GAAG,UCDhlB,GAAS,WAAa,IAAIpC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACE,YAAY,2BAA2B,CAACF,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACN,EAAIQ,GAAG,YAAY,UACvS,GAAkB,GCYtB,IACElC,KAAM,eCd6U,MCOjV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI0B,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAQF,EAAmB,gBAAEI,EAAG,UAAU,CAACE,YAAY,oCAAoC,CAACF,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,MAAM,CAACE,YAAY,yDAAyD,CAACF,EAAG,KAAK,CAACA,EAAG,KAAK,CAAC4B,MAAM,CAAE,YAAiC,oBAApBhC,EAAI4E,OAAOC,OAA8B,CAACzE,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQzB,EAAIsuB,iBAAiB,CAACtuB,EAAImC,GAAG,GAAG/B,EAAG,OAAO,GAAG,CAACJ,EAAIoC,GAAG,iBAAiBhC,EAAG,KAAK,CAAC4B,MAAM,CAAE,YAAiC,oBAApBhC,EAAI4E,OAAOC,OAA8B,CAACzE,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQzB,EAAIuuB,iBAAiB,CAACvuB,EAAImC,GAAG,GAAG/B,EAAG,OAAO,GAAG,CAACJ,EAAIoC,GAAG,6BAA6BpC,EAAI+B,MAChuB,GAAkB,CAAC,WAAa,IAAI/B,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,OAAO,CAACE,YAAY,iBAAiB,CAACF,EAAG,IAAI,CAACE,YAAY,6BAA6B,WAAa,IAAIN,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,OAAO,CAACE,YAAY,iBAAiB,CAACF,EAAG,IAAI,CAACE,YAAY,wBC2BpV,IACEhC,KAAM,aAENgG,MAAO,CAAC,SAERK,SAAU,CACR,kBACE,OAAO1E,KAAK8E,OAAOC,MAAMe,QAAQC,oBAGnCwoB,YAAa,WACX,OAAKvuB,KAAKqL,MAIH,CACLa,KAAM,gDACNb,MAAOrL,KAAKqL,MACZ0F,MAAO,EACPC,OAAQ,GAPD,OAYb/L,QAAS,CACPopB,eAAgB,WACdruB,KAAKkF,QAAQnI,KAAK,CAChB6H,KAAM,kBACNyG,MAAOrL,KAAKuuB,eAIhBD,eAAgB,WACdtuB,KAAKkF,QAAQnI,KAAK,CAChB6H,KAAM,kBACNyG,MAAOrL,KAAKuuB,iBC/DgU,MCOhV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCoLf,IACElwB,KAAM,aACNiH,WAAY,CAAd,iIAEE,OACE,MAAO,CACL2nB,aAAc,GAEdtT,OAAQ,CAAd,kBACMhS,QAAS,CAAf,kBACMC,OAAQ,CAAd,kBACMoiB,UAAW,CAAjB,kBACM2B,UAAW,CAAjB,kBACMwC,WAAY,CAAlB,kBACMH,SAAU,CAAhB,oBAIEtpB,SAAU,CACR,kBACE,OAAO1E,KAAK8E,OAAOC,MAAMmE,iBAG3B,cACE,OAAOlJ,KAAK2E,OAAO0G,MAAMa,MAAQlM,KAAK2E,OAAO0G,MAAMa,KAAK4H,SAAS,UAEnE,yBACE,OAAO9T,KAAK2Z,OAAO2P,MAAQtpB,KAAK2Z,OAAOjR,MAAMjM,QAG/C,eACE,OAAOuD,KAAK2E,OAAO0G,MAAMa,MAAQlM,KAAK2E,OAAO0G,MAAMa,KAAK4H,SAAS,WAEnE,0BACE,OAAO9T,KAAK2H,QAAQ2hB,MAAQtpB,KAAK2H,QAAQe,MAAMjM,QAGjD,cACE,OAAOuD,KAAK2E,OAAO0G,MAAMa,MAAQlM,KAAK2E,OAAO0G,MAAMa,KAAK4H,SAAS,UAEnE,yBACE,OAAO9T,KAAK4H,OAAO0hB,MAAQtpB,KAAK4H,OAAOc,MAAMjM,QAG/C,iBACE,OAAOuD,KAAK2E,OAAO0G,MAAMa,MAAQlM,KAAK2E,OAAO0G,MAAMa,KAAK4H,SAAS,aAEnE,4BACE,OAAO9T,KAAKgqB,UAAUV,MAAQtpB,KAAKgqB,UAAUthB,MAAMjM,QAGrD,iBACE,OAAOuD,KAAK2E,OAAO0G,MAAMa,MAAQlM,KAAK2E,OAAO0G,MAAMa,KAAK4H,SAAS,aAEnE,4BACE,OAAO9T,KAAK2rB,UAAUrC,MAAQtpB,KAAK2rB,UAAUjjB,MAAMjM,QAGrD,kBACE,OAAOuD,KAAK2E,OAAO0G,MAAMa,MAAQlM,KAAK2E,OAAO0G,MAAMa,KAAK4H,SAAS,cAEnE,6BACE,OAAO9T,KAAKmuB,WAAW7E,MAAQtpB,KAAKmuB,WAAWzlB,MAAMjM,QAGvD,gBACE,OAAOuD,KAAK2E,OAAO0G,MAAMa,MAAQlM,KAAK2E,OAAO0G,MAAMa,KAAK4H,SAAS,YAEnE,2BACE,OAAO9T,KAAKguB,SAAS1E,MAAQtpB,KAAKguB,SAAStlB,MAAMjM,QAGnD,qBACE,OAAOuD,KAAK8E,OAAOS,QAAQC,gBAAgB,eAAgB,qCAAqC1G,QAIpGmG,QAAS,CACPgO,OAAQ,SAAUub,GAChB,IAAKA,EAAMnjB,MAAMA,OAA+B,KAAtBmjB,EAAMnjB,MAAMA,MAGpC,OAFArL,KAAKitB,aAAe,QACpBjtB,KAAKoZ,MAAMqV,aAAanV,QAI1BtZ,KAAKitB,aAAeuB,EAAMnjB,MAAMA,MAChCrL,KAAK0uB,YAAYF,EAAMnjB,OACvBrL,KAAK2uB,iBAAiBH,EAAMnjB,OAC5BrL,KAAK4uB,eAAeJ,EAAMnjB,OAC1BrL,KAAK8E,OAAOE,OAAO,EAAzB,gBAGI0pB,YAAa,SAAUrjB,GACrB,GAAIA,EAAMa,KAAKd,QAAQ,SAAW,GAAKC,EAAMa,KAAKd,QAAQ,UAAY,GAAKC,EAAMa,KAAKd,QAAQ,SAAW,GAAKC,EAAMa,KAAKd,QAAQ,YAAc,EAC7I,OAGF,MAAM8H,EAAe,CACnBhH,KAAMb,EAAMa,KACZoE,WAAY,SAGVjF,EAAMA,MAAMxG,WAAW,UACzBqO,EAAa5R,WAAa+J,EAAMA,MAAMwX,QAAQ,UAAW,IAAIgM,OAE7D3b,EAAa7H,MAAQA,EAAMA,MAGzBA,EAAM0F,QACRmC,EAAanC,MAAQ1F,EAAM0F,MAC3BmC,EAAalC,OAAS3F,EAAM2F,QAG9BgF,EAAO/C,OAAOC,GAAc/E,KAAK,EAAvC,WACQnO,KAAK2Z,OAAS1d,EAAK0d,OAAS1d,EAAK0d,OAAS,CAAlD,kBACQ3Z,KAAK2H,QAAU1L,EAAK0L,QAAU1L,EAAK0L,QAAU,CAArD,kBACQ3H,KAAK4H,OAAS3L,EAAK2L,OAAS3L,EAAK2L,OAAS,CAAlD,kBACQ5H,KAAKgqB,UAAY/tB,EAAK+tB,UAAY/tB,EAAK+tB,UAAY,CAA3D,kBACQhqB,KAAK2rB,UAAY1vB,EAAK0vB,UAAY1vB,EAAK0vB,UAAY,CAA3D,qBAIIgD,iBAAkB,SAAUtjB,GAC1B,GAAIA,EAAMa,KAAKd,QAAQ,aAAe,EACpC,OAGF,MAAM8H,EAAe,CACnBhH,KAAM,QACNoE,WAAY,aAGVjF,EAAMA,MAAMxG,WAAW,UACzBqO,EAAa5R,WAAa+J,EAAMA,MAAMwX,QAAQ,UAAW,IAAIgM,OAE7D3b,EAAa5R,WAAa,qBAAuB+J,EAAMA,MAAQ,yBAA2BA,EAAMA,MAAQ,kCAGtGA,EAAM0F,QACRmC,EAAanC,MAAQ1F,EAAM0F,MAC3BmC,EAAalC,OAAS3F,EAAM2F,QAG9BgF,EAAO/C,OAAOC,GAAc/E,KAAK,EAAvC,WACQnO,KAAKmuB,WAAalyB,EAAK2L,OAAS3L,EAAK2L,OAAS,CAAtD,qBAIIgnB,eAAgB,SAAUvjB,GACxB,GAAIA,EAAMa,KAAKd,QAAQ,WAAa,EAClC,OAGF,MAAM8H,EAAe,CACnBhH,KAAM,QACNoE,WAAY,WAGVjF,EAAMA,MAAMxG,WAAW,UACzBqO,EAAa5R,WAAa+J,EAAMA,MAAMwX,QAAQ,UAAW,IAAIgM,OAE7D3b,EAAa5R,WAAa,qBAAuB+J,EAAMA,MAAQ,yBAA2BA,EAAMA,MAAQ,gCAGtGA,EAAM0F,QACRmC,EAAanC,MAAQ1F,EAAM0F,MAC3BmC,EAAalC,OAAS3F,EAAM2F,QAG9BgF,EAAO/C,OAAOC,GAAc/E,KAAK,EAAvC,WACQnO,KAAKguB,SAAW/xB,EAAK2L,OAAS3L,EAAK2L,OAAS,CAApD,qBAIIolB,WAAY,WACLhtB,KAAKitB,eAIVjtB,KAAKkF,QAAQnI,KAAK,CAChB6H,KAAM,kBACNyG,MAAO,CACLa,KAAM,yDACNb,MAAOrL,KAAKitB,aACZlc,MAAO,EACPC,OAAQ,KAGZhR,KAAKoZ,MAAMqV,aAAaK,SAG1BzB,mBAAoB,WAClBrtB,KAAKkF,QAAQnI,KAAK,CAChB6H,KAAM,kBACNyG,MAAO,CACLa,KAAM,QACNb,MAAOrL,KAAK2E,OAAO0G,MAAMA,UAK/BmiB,oBAAqB,WACnBxtB,KAAKkF,QAAQnI,KAAK,CAChB6H,KAAM,kBACNyG,MAAO,CACLa,KAAM,SACNb,MAAOrL,KAAK2E,OAAO0G,MAAMA,UAK/BqiB,mBAAoB,WAClB1tB,KAAKkF,QAAQnI,KAAK,CAChB6H,KAAM,kBACNyG,MAAO,CACLa,KAAM,QACNb,MAAOrL,KAAK2E,OAAO0G,MAAMA,UAK/BuiB,sBAAuB,WACrB5tB,KAAKkF,QAAQnI,KAAK,CAChB6H,KAAM,kBACNyG,MAAO,CACLa,KAAM,SACNb,MAAOrL,KAAK2E,OAAO0G,MAAMA,UAK/ByiB,sBAAuB,WACrB9tB,KAAKkF,QAAQnI,KAAK,CAChB6H,KAAM,kBACNyG,MAAO,CACLa,KAAM,WACNb,MAAOrL,KAAK2E,OAAO0G,MAAMA,UAK/B+iB,uBAAwB,WACtBpuB,KAAKkF,QAAQnI,KAAK,CAChB6H,KAAM,kBACNyG,MAAO,CACLa,KAAM,YACNb,MAAOrL,KAAK2E,OAAO0G,MAAMA,UAK/B4iB,qBAAsB,WACpBjuB,KAAKkF,QAAQnI,KAAK,CAChB6H,KAAM,kBACNyG,MAAO,CACLa,KAAM,UACNb,MAAOrL,KAAK2E,OAAO0G,MAAMA,UAK/B4e,cAAe,SAAUtY,GACvB3R,KAAKkF,QAAQnI,KAAK,CAAxB,kDAGI6uB,cAAe,SAAUF,GACvB1rB,KAAKkF,QAAQnI,KAAK,CAAxB,qCAGIowB,mBAAoB,SAAU9hB,GAC5BrL,KAAKitB,aAAe5hB,EACpBrL,KAAKgtB,cAGP/B,kBAAmB,SAAUjE,GAC3BhnB,KAAKknB,eAAiBF,EACtBhnB,KAAK8nB,0BAA2B,GAGlCiH,kBAAmB,SAAUxoB,GAC3BvG,KAAKokB,eAAiB7d,EACtBvG,KAAKmpB,0BAA2B,GAGlC6F,mBAAoB,SAAU3oB,GAC5BrG,KAAKooB,gBAAkB/hB,EACvBrG,KAAK6oB,2BAA4B,GAGnCoG,qBAAsB,SAAUtd,GAC9B3R,KAAKkqB,kBAAoBvY,EACzB3R,KAAKyqB,6BAA8B,GAGrC+B,qBAAsB,SAAUd,GAC9B1rB,KAAK6rB,kBAAoBH,EACzB1rB,KAAKgsB,6BAA8B,IAIvCkD,QAAS,WACPlvB,KAAKiT,OAAOjT,KAAK2E,SAGnBqB,MAAO,CACL,OAAJ,KACMhG,KAAKiT,OAAO3O,MCxfkU,MCOhV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIvE,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,UAAU,CAACE,YAAY,WAAW,CAACF,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,MAAM,CAACE,YAAY,kDAAkD,CAACF,EAAG,IAAI,CAACE,YAAY,WAAW,CAACF,EAAG,IAAI,CAACJ,EAAIoC,GAAG,aAAapC,EAAIoC,GAAG,cAAcpC,EAAImG,GAAGnG,EAAI2F,OAAO6B,YAAYpH,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2F,OAAOoW,yBAAyB3b,EAAG,UAAU,CAACE,YAAY,WAAW,CAACF,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACN,EAAImC,GAAG,GAAG/B,EAAG,MAAM,CAACE,YAAY,eAAe,CAAEN,EAAI4F,QAAgB,SAAExF,EAAG,MAAM,CAACA,EAAG,IAAI,CAACE,YAAY,8BAA8B,CAACN,EAAIoC,GAAG,cAAchC,EAAG,MAAM,CAACA,EAAG,IAAI,CAACE,YAAY,kBAAkBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAI8L,sBAAsB,CAAC9L,EAAIoC,GAAG,kBAAkBhC,EAAG,QAAQ,CAACE,YAAY,SAAS,CAACF,EAAG,QAAQ,CAACA,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIoC,GAAG,aAAahC,EAAG,KAAK,CAACE,YAAY,kBAAkB,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,SAAPngB,CAAiBA,EAAI4F,QAAQgC,eAAexH,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIoC,GAAG,YAAYhC,EAAG,KAAK,CAACE,YAAY,kBAAkB,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,SAAPngB,CAAiBA,EAAI4F,QAAQiC,cAAczH,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIoC,GAAG,YAAYhC,EAAG,KAAK,CAACE,YAAY,kBAAkB,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,SAAPngB,CAAiBA,EAAI4F,QAAQkC,aAAa1H,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIoC,GAAG,oBAAoBhC,EAAG,KAAK,CAACE,YAAY,kBAAkB,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,WAAPngB,CAA6C,IAA1BA,EAAI4F,QAAQmC,YAAmB,qDAAqD3H,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIoC,GAAG,qBAAqBhC,EAAG,KAAK,CAACE,YAAY,kBAAkB,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,cAAPngB,CAAsBA,EAAI4F,QAAQwpB,aAAa,KAAKhvB,EAAG,OAAO,CAACE,YAAY,iBAAiB,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAImgB,GAAG,OAAPngB,CAAeA,EAAI4F,QAAQwpB,WAAW,QAAQ,WAAWhvB,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIoC,GAAG,YAAYhC,EAAG,KAAK,CAACE,YAAY,kBAAkB,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,cAAPngB,CAAsBA,EAAI4F,QAAQypB,YAAW,IAAO,KAAKjvB,EAAG,OAAO,CAACE,YAAY,iBAAiB,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAImgB,GAAG,OAAPngB,CAAeA,EAAI4F,QAAQypB,WAAW,OAAO,yBAAyBjvB,EAAG,UAAU,CAACE,YAAY,WAAW,CAACF,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,MAAM,CAACE,YAAY,oCAAoC,CAACF,EAAG,IAAI,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,6BAA6BpC,EAAImG,GAAGnG,EAAImgB,GAAG,OAAPngB,CAAeA,EAAI2F,OAAO8B,eAAe,OAAOzH,EAAImC,GAAG,gBACphF,GAAkB,CAAC,WAAa,IAAInC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,cAAc,CAACF,EAAG,MAAM,CAACE,YAAY,cAAc,CAACF,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,kBAAkB,WAAa,IAAIpC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,IAAI,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,6BAA6BhC,EAAG,IAAI,CAACgB,MAAM,CAAC,KAAO,oBAAoB,CAACpB,EAAIoC,GAAG,WAAWpC,EAAIoC,GAAG,MAAMhC,EAAG,IAAI,CAACgB,MAAM,CAAC,KAAO,qCAAqC,CAACpB,EAAIoC,GAAG,2BAA2BpC,EAAIoC,GAAG,MAAMhC,EAAG,IAAI,CAACgB,MAAM,CAAC,KAAO,uBAAuB,CAACpB,EAAIoC,GAAG,YAAYpC,EAAIoC,GAAG,MAAMhC,EAAG,IAAI,CAACgB,MAAM,CAAC,KAAO,wCAAwC,CAACpB,EAAIoC,GAAG,WAAWpC,EAAIoC,GAAG,SAAShC,EAAG,IAAI,CAACgB,MAAM,CAAC,KAAO,mEAAmE,CAACpB,EAAIoC,GAAG,UAAUpC,EAAIoC,GAAG,SCkFh2B,IACE9D,KAAM,YAEN,OACE,MAAO,CACLgxB,sBAAsB,EACtBC,qBAAqB,IAIzB5qB,SAAU,CACR,SACE,OAAO1E,KAAK8E,OAAOC,MAAMW,QAE3B,UACE,OAAO1F,KAAK8E,OAAOC,MAAMY,UAI7BV,QAAS,CACP,eAAJ,GACMjF,KAAKqvB,sBAAuB,GAE9B,mBACErvB,KAAK8E,OAAOE,OAAO,GAAzB,KAIEuqB,QAAS,CACPvG,KAAM,SAAUwG,GACd,OAAOA,EAAMxG,KAAK,SCjH2T,MCO/U,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIjpB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,cAAcA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,oBAAoBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACzZ,EAAI4G,GAAI5G,EAAgB,cAAE,SAASwG,GAAO,OAAOpG,EAAG,0BAA0B,CAACf,IAAImH,EAAM3F,GAAGO,MAAM,CAAC,MAAQoF,GAAO/E,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAI4f,WAAWpZ,MAAU,CAAExG,EAAsB,mBAAEI,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,8CAA8C,CAACF,EAAG,gBAAgB,CAACgB,MAAM,CAAC,YAAcpB,EAAI0hB,YAAYlb,GAAO,OAASA,EAAMF,OAAO,MAAQE,EAAMlI,KAAK,SAAW,GAAG,UAAY,OAAO,KAAK0B,EAAI+B,KAAK3B,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIgvB,kBAAkBxoB,MAAU,CAACpG,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAKF,EAAG,6BAA6B,CAACgB,MAAM,CAAC,KAAOpB,EAAIopB,yBAAyB,MAAQppB,EAAIqkB,gBAAgB5iB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIopB,0BAA2B,OAAW,GAAGhpB,EAAG,WAAW,CAACqZ,KAAK,UAAU,CAACrZ,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,cAAc,CAACE,YAAY,sCAAsCc,MAAM,CAAC,GAAK,gCAAgC,CAACpB,EAAIoC,GAAG,kBAAkB,QAAQ,GAAGhC,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,0BAA0BhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACzZ,EAAI4G,GAAI5G,EAAsB,oBAAE,SAAS2rB,GAAU,OAAOvrB,EAAG,6BAA6B,CAACf,IAAIssB,EAAS9qB,GAAGO,MAAM,CAAC,SAAWuqB,IAAW,CAACvrB,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIysB,qBAAqBd,MAAa,CAACvrB,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAKF,EAAG,gCAAgC,CAACgB,MAAM,CAAC,KAAOpB,EAAIisB,4BAA4B,SAAWjsB,EAAI8rB,mBAAmBrqB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIisB,6BAA8B,OAAW,GAAG7rB,EAAG,WAAW,CAACqZ,KAAK,UAAU,CAACrZ,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,cAAc,CAACE,YAAY,sCAAsCc,MAAM,CAAC,GAAK,sCAAsC,CAACpB,EAAIoC,GAAG,kBAAkB,QAAQ,IAAI,IAChzE,GAAkB,GCDlB,GAAS,SAAUlC,EAAGF,GAAM,IAAII,EAAGJ,EAAII,GAAG,OAAOA,EAAG,MAAM,CAACE,YAAY,SAAS,CAAEN,EAAI8e,OAAO,WAAY1e,EAAG,MAAM,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAI8kB,UAAUC,QAAQ,CAAC/kB,EAAIQ,GAAG,YAAY,GAAGR,EAAI+B,KAAK3B,EAAG,MAAM,CAACE,YAAY,yCAAyCmB,GAAG,CAAC,MAAQzB,EAAI8kB,UAAUC,QAAQ,CAAC3kB,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsE,MAAMkC,MAAMlI,SAAS8B,EAAG,KAAK,CAACE,YAAY,+BAA+B,CAACF,EAAG,IAAI,CAACJ,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsE,MAAMkC,MAAMoB,QAAQ,GAAGtJ,WAAW8B,EAAG,KAAK,CAACE,YAAY,sDAAsD,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAIsE,MAAMkC,MAAMkpB,YAAY,KAAK1vB,EAAImG,GAAGnG,EAAImgB,GAAG,OAAPngB,CAAeA,EAAIsE,MAAMkC,MAAMmpB,aAAa,MAAM,SAASvvB,EAAG,MAAM,CAACE,YAAY,eAAe,CAACN,EAAIQ,GAAG,YAAY,MACpvB,GAAkB,GCkBtB,IACElC,KAAM,uBACNgG,MAAO,CAAC,UCrBoV,MCO1V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAItE,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,MAAM,CAACE,YAAY,yCAAyCmB,GAAG,CAAC,MAAQzB,EAAI6rB,gBAAgB,CAACzrB,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2rB,SAASrtB,SAAS8B,EAAG,KAAK,CAACE,YAAY,iBAAiB,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2rB,SAASiE,MAAMC,mBAAmBzvB,EAAG,MAAM,CAACE,YAAY,eAAe,CAACN,EAAIQ,GAAG,YAAY,MACxb,GAAkB,GCYtB,IACElC,KAAM,0BACNgG,MAAO,CAAC,YAERY,QAAS,CACP2mB,cAAe,WACb5rB,KAAKkF,QAAQnI,KAAK,CAAxB,uDCnBiW,MCO7V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIgD,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,SAAS,CAACiB,WAAW,CAAC,CAAC/C,KAAK,OAAOgD,QAAQ,SAASvC,MAAOiB,EAAmB,gBAAEuB,WAAW,oBAAoBjB,YAAY,wCAAwC,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgBc,MAAM,CAAC,IAAMpB,EAAI0hB,aAAajgB,GAAG,CAAC,KAAOzB,EAAIulB,eAAe,MAAQvlB,EAAIwlB,mBAAmBplB,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAI4f,aAAa,CAAC5f,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAMlI,WAAW8B,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,IAAI,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAImlB,cAAc,CAACnlB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAMoB,QAAQ,GAAGtJ,WAAW8B,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,OAAPngB,CAAeA,EAAIwG,MAAMmpB,aAAa,WAAWvvB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,UAAUhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAMkpB,qBAAqBtvB,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIiO,YAAY,CAAC7N,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIqO,iBAAiB,CAACjO,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,gBAAgBhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IACxuE,GAAkB,GCkDtB,IACEzD,KAAM,0BACNgG,MAAO,CAAC,OAAQ,SAEhB,OACE,MAAO,CACLghB,iBAAiB,IAIrB3gB,SAAU,CACR+c,YAAa,WACX,OAAIzhB,KAAKuG,MAAMspB,QAAU7vB,KAAKuG,MAAMspB,OAAOpzB,OAAS,EAC3CuD,KAAKuG,MAAMspB,OAAO,GAAG1d,IAEvB,KAIXlN,QAAS,CACP2P,KAAM,WACJ5U,KAAKwY,MAAM,SACXxC,EAAOtH,gBAAgB1O,KAAKuG,MAAM0H,KAAK,IAGzCD,UAAW,WACThO,KAAKwY,MAAM,SACXxC,EAAOhI,UAAUhO,KAAKuG,MAAM0H,MAG9BG,eAAgB,WACdpO,KAAKwY,MAAM,SACXxC,EAAO5H,eAAepO,KAAKuG,MAAM0H,MAGnC0R,WAAY,WACV3f,KAAKkF,QAAQnI,KAAK,CAAxB,+CAGImoB,YAAa,WACXllB,KAAKkF,QAAQnI,KAAK,CAAxB,2DAGIuoB,eAAgB,WACdtlB,KAAKqlB,iBAAkB,GAGzBE,cAAe,WACbvlB,KAAKqlB,iBAAkB,KCnGoU,MCO7V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAItlB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAI6rB,gBAAgB,CAAC7rB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2rB,SAASrtB,WAAW8B,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2rB,SAASiE,MAAMC,mBAAmBzvB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,YAAYhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2rB,SAAS/R,OAAO2P,YAAYnpB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,UAAUhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2rB,SAASzd,cAAc9N,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIiO,YAAY,CAAC7N,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIqO,iBAAiB,CAACjO,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,gBAAgBhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IACl4D,GAAkB,GC+CtB,IACEzD,KAAM,6BACNgG,MAAO,CAAC,OAAQ,YAEhBY,QAAS,CACP2P,KAAM,WACJ5U,KAAKwY,MAAM,SACXxC,EAAOtH,gBAAgB1O,KAAK0rB,SAASzd,KAAK,IAG5CD,UAAW,WACThO,KAAKwY,MAAM,SACXxC,EAAOhI,UAAUhO,KAAK0rB,SAASzd,MAGjCG,eAAgB,WACdpO,KAAKwY,MAAM,SACXxC,EAAO5H,eAAepO,KAAK0rB,SAASzd,MAGtC2d,cAAe,WACb5rB,KAAKkF,QAAQnI,KAAK,CAAxB,uDCrEoW,MCOhW,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCkEf,MAAM,GAAN,CACEyY,KAAM,SAAUlR,GACd,GAAIuI,EAAM9H,MAAM8D,qBAAqBpM,OAAS,GAAKoQ,EAAM9H,MAAM+D,2BAA2BrM,OAAS,EACjG,OAAOuQ,QAAQ9L,UAGjB,MAAMwf,EAAa,IAAI,GAA3B,EAEI,OADAA,EAAWC,eAAe9T,EAAM9H,MAAMe,QAAQ2X,cACvCzQ,QAAQ4a,IAAI,CACvB,kBAAM,QAAN,+BAAM,MAAN,KACA,wBAAM,QAAN,+BAAM,MAAN,QAIE5D,IAAK,SAAUhI,EAAIxP,GACbA,IACFK,EAAM7H,OAAO,EAAnB,mBACM6H,EAAM7H,OAAO,EAAnB,yBAKA,QACE3G,KAAM,oBACNwpB,OAAQ,CAAChE,GAAyB,KAClCve,WAAY,CAAd,gKAEE,OACE,MAAO,CACL6jB,0BAA0B,EAC1B/E,eAAgB,GAEhB4H,6BAA6B,EAC7BH,kBAAmB,KAIvBnnB,SAAU,CACR,eACE,OAAO1E,KAAK8E,OAAOC,MAAM8D,qBAAqBhJ,MAAM,EAAG,IAGzD,qBACE,OAAOG,KAAK8E,OAAOC,MAAM+D,2BAA2BjJ,MAAM,EAAG,IAG/D,qBACE,OAAOG,KAAK8E,OAAOS,QAAQC,gBAAgB,eAAgB,qCAAqC1G,QAIpGmG,QAAS,CAEP0a,WAAY,SAAUpZ,GACpBvG,KAAKkF,QAAQnI,KAAK,CAAxB,sCAGIgyB,kBAAmB,SAAUxoB,GAC3BvG,KAAKokB,eAAiB7d,EACtBvG,KAAKmpB,0BAA2B,GAGlCqD,qBAAsB,SAAUd,GAC9B1rB,KAAK6rB,kBAAoBH,EACzB1rB,KAAKgsB,6BAA8B,GAGrCvK,YAAa,SAAUlb,GACrB,OAAIA,EAAMspB,QAAUtpB,EAAMspB,OAAOpzB,OAAS,EACjC8J,EAAMspB,OAAO,GAAG1d,IAElB,MC3J8U,MCOvV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIpS,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,cAAcA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,oBAAoBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACzZ,EAAI4G,GAAI5G,EAAgB,cAAE,SAASwG,GAAO,OAAOpG,EAAG,0BAA0B,CAACf,IAAImH,EAAM3F,GAAGO,MAAM,CAAC,MAAQoF,GAAO/E,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAI4f,WAAWpZ,MAAU,CAAExG,EAAsB,mBAAEI,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,8CAA8C,CAACF,EAAG,gBAAgB,CAACgB,MAAM,CAAC,YAAcpB,EAAI0hB,YAAYlb,GAAO,OAASA,EAAMF,OAAO,MAAQE,EAAMlI,KAAK,SAAW,GAAG,UAAY,OAAO,KAAK0B,EAAI+B,KAAK3B,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIgvB,kBAAkBxoB,MAAU,CAACpG,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAKF,EAAG,6BAA6B,CAACgB,MAAM,CAAC,KAAOpB,EAAIopB,yBAAyB,MAAQppB,EAAIqkB,gBAAgB5iB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIopB,0BAA2B,OAAW,IAAI,IAAI,IAC9mC,GAAkB,GC6CtB,MAAM,GAAN,CACE3T,KAAM,SAAUlR,GACd,GAAIuI,EAAM9H,MAAM8D,qBAAqBpM,OAAS,EAC5C,OAAOuQ,QAAQ9L,UAGjB,MAAMwf,EAAa,IAAI,GAA3B,EAEI,OADAA,EAAWC,eAAe9T,EAAM9H,MAAMe,QAAQ2X,cACvCiD,EAAWoP,eAAe,CAArC,mDAGE9L,IAAK,SAAUhI,EAAIxP,GACbA,GACFK,EAAM7H,OAAO,EAAnB,kBAKA,QACE3G,KAAM,+BACNwpB,OAAQ,CAAChE,GAAyB,KAClCve,WAAY,CAAd,uGAEE,OACE,MAAO,CACL6jB,0BAA0B,EAC1B/E,eAAgB,KAIpB1f,SAAU,CACR,eACE,OAAO1E,KAAK8E,OAAOC,MAAM8D,sBAG3B,qBACE,OAAO7I,KAAK8E,OAAOS,QAAQC,gBAAgB,eAAgB,qCAAqC1G,QAIpGmG,QAAS,CAEP0a,WAAY,SAAUpZ,GACpBvG,KAAKkF,QAAQnI,KAAK,CAAxB,sCAGIgyB,kBAAmB,SAAUxoB,GAC3BvG,KAAKokB,eAAiB7d,EACtBvG,KAAKmpB,0BAA2B,GAGlC1H,YAAa,SAAUlb,GACrB,OAAIA,EAAMspB,QAAUtpB,EAAMspB,OAAOpzB,OAAS,EACjC8J,EAAMspB,OAAO,GAAG1d,IAElB,MCrGyV,MCOlW,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIpS,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,cAAcA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,0BAA0BhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACzZ,EAAI4G,GAAI5G,EAAsB,oBAAE,SAAS2rB,GAAU,OAAOvrB,EAAG,6BAA6B,CAACf,IAAIssB,EAAS9qB,GAAGO,MAAM,CAAC,SAAWuqB,IAAW,CAACvrB,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIysB,qBAAqBd,MAAa,CAACvrB,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAKF,EAAG,gCAAgC,CAACgB,MAAM,CAAC,KAAOpB,EAAIisB,4BAA4B,SAAWjsB,EAAI8rB,mBAAmBrqB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIisB,6BAA8B,OAAW,IAAI,IAAI,IAC90B,GAAkB,GC+BtB,MAAM,GAAN,CACExW,KAAM,SAAUlR,GACd,GAAIuI,EAAM9H,MAAM+D,2BAA2BrM,OAAS,EAClD,OAAOuQ,QAAQ9L,UAGjB,MAAMwf,EAAa,IAAI,GAA3B,EACIA,EAAWC,eAAe9T,EAAM9H,MAAMe,QAAQ2X,cAC9CiD,EAAWqP,qBAAqB,CAApC,mDAGE/L,IAAK,SAAUhI,EAAIxP,GACbA,GACFK,EAAM7H,OAAO,EAAnB,qBAKA,QACE3G,KAAM,qCACNwpB,OAAQ,CAAChE,GAAyB,KAClCve,WAAY,CAAd,6FAEE,OACE,MAAO,CACL0mB,6BAA6B,EAC7BH,kBAAmB,KAIvBnnB,SAAU,CACR,qBACE,OAAO1E,KAAK8E,OAAOC,MAAM+D,6BAI7B7D,QAAS,CACPunB,qBAAsB,SAAUd,GAC9B1rB,KAAK6rB,kBAAoBH,EACzB1rB,KAAKgsB,6BAA8B,KCvEmU,MCOxW,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIjsB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsG,OAAOhI,WAAW8B,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI8oB,2BAA4B,KAAQ,CAAC1oB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,yCAAyCF,EAAG,IAAI,CAACE,YAAY,qCAAqCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACJ,EAAIoC,GAAG,mBAAmBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,oCAAoC,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIupB,OAAO,aAAavpB,EAAI4G,GAAI5G,EAAU,QAAE,SAASwG,GAAO,OAAOpG,EAAG,0BAA0B,CAACf,IAAImH,EAAM3F,GAAGO,MAAM,CAAC,MAAQoF,GAAO/E,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAI4f,WAAWpZ,MAAU,CAAExG,EAAsB,mBAAEI,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,8CAA8C,CAACF,EAAG,gBAAgB,CAACgB,MAAM,CAAC,YAAcpB,EAAI0hB,YAAYlb,GAAO,OAASA,EAAMF,OAAO,MAAQE,EAAMlI,KAAK,SAAW,GAAG,UAAY,OAAO,KAAK0B,EAAI+B,KAAK3B,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIye,YAAYjY,MAAU,CAACpG,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAMN,EAAIiR,OAASjR,EAAIupB,MAAOnpB,EAAG,mBAAmB,CAACqB,GAAG,CAAC,SAAWzB,EAAIiwB,YAAY,CAAC7vB,EAAG,OAAO,CAACgB,MAAM,CAAC,KAAO,WAAWqY,KAAK,WAAW,CAACzZ,EAAIoC,GAAG,SAASpC,EAAI+B,KAAK3B,EAAG,6BAA6B,CAACgB,MAAM,CAAC,KAAOpB,EAAI0e,mBAAmB,MAAQ1e,EAAIqkB,gBAAgB5iB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI0e,oBAAqB,MAAUte,EAAG,8BAA8B,CAACgB,MAAM,CAAC,KAAOpB,EAAI8oB,0BAA0B,OAAS9oB,EAAIsG,QAAQ7E,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI8oB,2BAA4B,OAAW,IAAI,IACp+D,GAAkB,GCDlB,GAAS,WAAa,IAAI9oB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAImlB,cAAc,CAACnlB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsG,OAAOhI,WAAW8B,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,4BAA4BhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsG,OAAO4pB,YAAY,MAAMlwB,EAAImG,GAAGnG,EAAIsG,OAAO6pB,UAAU5G,YAAYnpB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,YAAYhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsG,OAAOgjB,OAAOL,KAAK,gBAAgB7oB,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIiO,YAAY,CAAC7N,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIqO,iBAAiB,CAACjO,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,gBAAgBhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IAC1yD,GAAkB,GC2CtB,IACEzD,KAAM,2BACNgG,MAAO,CAAC,OAAQ,UAEhBY,QAAS,CACP2P,KAAM,WACJ5U,KAAKwY,MAAM,SACXxC,EAAOtH,gBAAgB1O,KAAKqG,OAAO4H,KAAK,IAG1CD,UAAW,WACThO,KAAKwY,MAAM,SACXxC,EAAOhI,UAAUhO,KAAKqG,OAAO4H,MAG/BG,eAAgB,WACdpO,KAAKwY,MAAM,SACXxC,EAAO5H,eAAepO,KAAKqG,OAAO4H,MAGpCiX,YAAa,WACXllB,KAAKkF,QAAQnI,KAAK,CAAxB,mDCjEkW,MCO9V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,gCCsCf,MAAM,GAAN,CACEyY,KAAM,SAAUlR,GACd,MAAMoc,EAAa,IAAI,GAA3B,EAEI,OADAA,EAAWC,eAAe9T,EAAM9H,MAAMe,QAAQ2X,cACvCzQ,QAAQ4a,IAAI,CACvB,gCACA,sCAAM,MAAN,GAAM,OAAN,EAAM,eAAN,eAAM,OAAN,oCAIE5D,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAG3V,OAASmG,EAAS,GAErBwP,EAAGpU,OAAS,GACZoU,EAAGsN,MAAQ,EACXtN,EAAGhL,OAAS,EACZgL,EAAGmU,cAAc3jB,EAAS,MAI9B,QACEnO,KAAM,oBACNwpB,OAAQ,CAAChE,GAAyB,KAClCve,WAAY,CAAd,2IAEE,OACE,MAAO,CACLe,OAAQ,GACRuB,OAAQ,GACR0hB,MAAO,EACPtY,OAAQ,EAERyN,oBAAoB,EACpB2F,eAAgB,GAEhByE,2BAA2B,IAI/BnkB,SAAU,CACR,qBACE,OAAO1E,KAAK8E,OAAOS,QAAQC,gBAAgB,eAAgB,qCAAqC1G,QAIpGmG,QAAS,CACP+qB,UAAW,SAAUI,GACnB,MAAM1P,EAAa,IAAI,GAA7B,EACMA,EAAWC,eAAe3gB,KAAK8E,OAAOC,MAAMe,QAAQ2X,cACpDiD,EAAW2P,gBAAgBrwB,KAAKqG,OAAOzF,GAAI,CAAjD,qEACQZ,KAAKmwB,cAAcl0B,EAAMm0B,MAI7BD,cAAe,SAAUl0B,EAAMm0B,GAC7BpwB,KAAK4H,OAAS5H,KAAK4H,OAAO8S,OAAOze,EAAKyM,OACtC1I,KAAKspB,MAAQrtB,EAAKqtB,MAClBtpB,KAAKgR,QAAU/U,EAAK8U,MAEhBqf,IACFA,EAAOE,SACHtwB,KAAKgR,QAAUhR,KAAKspB,OACtB8G,EAAOG,aAKb3b,KAAM,WACJ5U,KAAKye,oBAAqB,EAC1BzI,EAAOtH,gBAAgB1O,KAAKqG,OAAO4H,KAAK,IAG1C0R,WAAY,SAAUpZ,GACpBvG,KAAKkF,QAAQnI,KAAK,CAAxB,sCAGIyhB,YAAa,SAAUjY,GACrBvG,KAAKokB,eAAiB7d,EACtBvG,KAAKye,oBAAqB,GAG5BgD,YAAa,SAAUlb,GACrB,OAAIA,EAAMspB,QAAUtpB,EAAMspB,OAAOpzB,OAAS,EACjC8J,EAAMspB,OAAO,GAAG1d,IAElB,MC7I8U,MCOvV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIpS,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,oBAAoB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAMlI,SAAS8B,EAAG,KAAK,CAACE,YAAY,sDAAsD,CAACF,EAAG,IAAI,CAACE,YAAY,gBAAgBmB,GAAG,CAAC,MAAQzB,EAAImlB,cAAc,CAACnlB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAMoB,QAAQ,GAAGtJ,WAAW8B,EAAG,MAAM,CAACE,YAAY,mDAAmD,CAACF,EAAG,IAAI,CAACE,YAAY,qCAAqCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACJ,EAAIoC,GAAG,eAAehC,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIopB,0BAA2B,KAAQ,CAAChpB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,6CAA6CF,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,IAAI,CAACE,YAAY,+CAA+C,CAACF,EAAG,gBAAgB,CAACgB,MAAM,CAAC,YAAcpB,EAAI0hB,YAAY,OAAS1hB,EAAIwG,MAAMF,OAAO,MAAQtG,EAAIwG,MAAMlI,MAAMmD,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIopB,0BAA2B,OAAU,KAAKhpB,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,2DAA2D,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAMoT,OAAO2P,OAAO,aAAavpB,EAAI4G,GAAI5G,EAAIwG,MAAMoT,OAAY,OAAE,SAASqN,EAAM9b,GAAO,OAAO/K,EAAG,0BAA0B,CAACf,IAAI4nB,EAAMpmB,GAAGO,MAAM,CAAC,MAAQ6lB,EAAM,SAAW9b,EAAM,MAAQnL,EAAIwG,MAAM,YAAcxG,EAAIwG,MAAM0H,MAAM,CAAC9N,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIkrB,kBAAkBjE,MAAU,CAAC7mB,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAKF,EAAG,6BAA6B,CAACgB,MAAM,CAAC,KAAOpB,EAAI+nB,yBAAyB,MAAQ/nB,EAAImnB,eAAe,MAAQnnB,EAAIwG,OAAO/E,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI+nB,0BAA2B,MAAU3nB,EAAG,6BAA6B,CAACgB,MAAM,CAAC,KAAOpB,EAAIopB,yBAAyB,MAAQppB,EAAIwG,OAAO/E,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIopB,0BAA2B,OAAW,IAAI,IACvlE,GAAkB,GCDlB,GAAS,WAAa,IAAIppB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,MAAM,CAACE,YAAY,yCAAyCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,KAAK,CAACE,YAAY,aAAa0B,MAAM,CAAE,uBAAiD,IAA1BhC,EAAIinB,MAAMwJ,cAAyB,CAACzwB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIinB,MAAM3oB,SAAS8B,EAAG,KAAK,CAACE,YAAY,gBAAgB0B,MAAM,CAAE,gBAAiBhC,EAAIinB,MAAMwJ,YAAa,uBAAiD,IAA1BzwB,EAAIinB,MAAMwJ,cAAyB,CAACrwB,EAAG,IAAI,CAACJ,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIinB,MAAMrf,QAAQ,GAAGtJ,YAAsC,IAA1B0B,EAAIinB,MAAMwJ,YAAuBrwB,EAAG,KAAK,CAACE,YAAY,iBAAiB,CAACN,EAAIoC,GAAG,2BAA4BpC,EAAIinB,MAAMyJ,cAAgB1wB,EAAIinB,MAAMyJ,aAAaC,OAAQvwB,EAAG,OAAO,CAACJ,EAAIoC,GAAG,yBAAyBpC,EAAImG,GAAGnG,EAAIinB,MAAMyJ,aAAaC,WAAW3wB,EAAI+B,KAAK/B,EAAIoC,GAAG,QAAQpC,EAAI+B,OAAO3B,EAAG,MAAM,CAACE,YAAY,eAAe,CAACN,EAAIQ,GAAG,YAAY,MACp3B,GAAkB,GCiBtB,IACElC,KAAM,uBAENgG,MAAO,CAAC,QAAS,WAAY,QAAS,eAEtCY,QAAS,CACP2P,KAAM,WACJoB,EAAOtH,gBAAgB1O,KAAK2wB,aAAa,EAAO3wB,KAAKqO,aCzBmS,MCO1V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAItO,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,aAAa,CAACgB,MAAM,CAAC,KAAO,SAAS,CAAEpB,EAAQ,KAAEI,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACF,EAAG,MAAM,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,aAAarY,EAAG,MAAM,CAACE,YAAY,+BAA+B,CAACF,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACF,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAIinB,MAAM3oB,MAAM,OAAO8B,EAAG,IAAI,CAACE,YAAY,YAAY,CAACN,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAIinB,MAAMrf,QAAQ,GAAGtJ,MAAM,OAAO8B,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAI4f,aAAa,CAAC5f,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAMlI,WAAW8B,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,IAAI,CAACE,YAAY,2BAA2BmB,GAAG,CAAC,MAAQzB,EAAImlB,cAAc,CAACnlB,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIwG,MAAMoB,QAAQ,GAAGtJ,WAAW8B,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,OAAPngB,CAAeA,EAAIwG,MAAMmpB,aAAa,WAAWvvB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIinB,MAAMhH,cAAc,MAAMjgB,EAAImG,GAAGnG,EAAIinB,MAAM/G,kBAAkB9f,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,YAAYhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,WAAPngB,CAAmBA,EAAIinB,MAAM4J,mBAAmBzwB,EAAG,IAAI,CAACA,EAAG,OAAO,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,UAAUhC,EAAG,OAAO,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIinB,MAAM/Y,cAAc9N,EAAG,SAAS,CAACE,YAAY,eAAe,CAACF,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIiO,YAAY,CAAC7N,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,WAAWhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAIqO,iBAAiB,CAACjO,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,4BAA4BN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,gBAAgBhC,EAAG,IAAI,CAACE,YAAY,iCAAiCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACE,YAAY,aAAa,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,SAAS,CAACE,YAAY,uBAAuBc,MAAM,CAAC,aAAa,SAASK,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIyY,MAAM,eAAezY,EAAI+B,QAAQ,IAC19E,GAAkB,GC8DtB,IACEzD,KAAM,0BACNgG,MAAO,CAAC,OAAQ,QAAS,SAEzBY,QAAS,CACP2P,KAAM,WACJ5U,KAAKwY,MAAM,SACXxC,EAAOtH,gBAAgB1O,KAAKgnB,MAAM/Y,KAAK,IAGzCD,UAAW,WACThO,KAAKwY,MAAM,SACXxC,EAAOhI,UAAUhO,KAAKgnB,MAAM/Y,MAG9BG,eAAgB,WACdpO,KAAKwY,MAAM,SACXxC,EAAO5H,eAAepO,KAAKgnB,MAAM/Y,MAGnC0R,WAAY,WACV3f,KAAKkF,QAAQnI,KAAK,CAAxB,+CAGImoB,YAAa,WACXllB,KAAKkF,QAAQnI,KAAK,CAAxB,6DCxFiW,MCO7V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCkCf,MAAM,GAAN,CACEyY,KAAM,SAAUlR,GACd,MAAMoc,EAAa,IAAI,GAA3B,EAEI,OADAA,EAAWC,eAAe9T,EAAM9H,MAAMe,QAAQ2X,cACvCiD,EAAWmQ,SAASvsB,EAAGgJ,OAAOwjB,SAAU,CAAnD,yCAGE9M,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAGzV,MAAQiG,IAIf,QACEnO,KAAM,YACNwpB,OAAQ,CAAChE,GAAyB,KAClCve,WAAY,CAAd,6HAEE,OACE,MAAO,CACLiB,MAAO,CAAb,wBAEMuhB,0BAA0B,EAC1BZ,eAAgB,GAEhBiC,0BAA0B,IAI9BzkB,SAAU,CACR+c,YAAa,WACX,OAAIzhB,KAAKuG,MAAMspB,QAAU7vB,KAAKuG,MAAMspB,OAAOpzB,OAAS,EAC3CuD,KAAKuG,MAAMspB,OAAO,GAAG1d,IAEvB,KAIXlN,QAAS,CACPigB,YAAa,WACXllB,KAAKkF,QAAQnI,KAAK,CAAxB,2DAGI6X,KAAM,WACJ5U,KAAKye,oBAAqB,EAC1BzI,EAAOtH,gBAAgB1O,KAAKuG,MAAM0H,KAAK,IAGzCgd,kBAAmB,SAAUjE,GAC3BhnB,KAAKknB,eAAiBF,EACtBhnB,KAAK8nB,0BAA2B,KCrGoT,MCOtV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI/nB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,MAAM,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2rB,SAASrtB,WAAW8B,EAAG,WAAW,CAACqZ,KAAK,iBAAiB,CAACrZ,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIisB,6BAA8B,KAAQ,CAAC7rB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,yCAAyCF,EAAG,IAAI,CAACE,YAAY,qCAAqCmB,GAAG,CAAC,MAAQzB,EAAI6U,OAAO,CAACzU,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACF,EAAG,IAAI,CAACE,YAAY,sBAAsBN,EAAIoC,GAAG,KAAKhC,EAAG,OAAO,CAACJ,EAAIoC,GAAG,mBAAmBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,oCAAoC,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI2rB,SAAS/R,OAAO2P,OAAO,aAAavpB,EAAI4G,GAAI5G,EAAU,QAAE,SAAS2J,EAAKwB,GAAO,OAAO/K,EAAG,0BAA0B,CAACf,IAAIsK,EAAKsd,MAAMpmB,GAAGO,MAAM,CAAC,MAAQuI,EAAKsd,MAAM,MAAQtd,EAAKsd,MAAMzgB,MAAM,SAAW2E,EAAM,YAAcnL,EAAI2rB,SAASzd,MAAM,CAAC9N,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIkrB,kBAAkBvhB,EAAKsd,UAAU,CAAC7mB,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAMN,EAAIiR,OAASjR,EAAIupB,MAAOnpB,EAAG,mBAAmB,CAACqB,GAAG,CAAC,SAAWzB,EAAIiwB,YAAY,CAAC7vB,EAAG,OAAO,CAACgB,MAAM,CAAC,KAAO,WAAWqY,KAAK,WAAW,CAACzZ,EAAIoC,GAAG,SAASpC,EAAI+B,KAAK3B,EAAG,6BAA6B,CAACgB,MAAM,CAAC,KAAOpB,EAAI+nB,yBAAyB,MAAQ/nB,EAAImnB,eAAe,MAAQnnB,EAAImnB,eAAe3gB,OAAO/E,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI+nB,0BAA2B,MAAU3nB,EAAG,gCAAgC,CAACgB,MAAM,CAAC,KAAOpB,EAAIisB,4BAA4B,SAAWjsB,EAAI2rB,UAAUlqB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIisB,6BAA8B,OAAW,IAAI,IACp0D,GAAkB,GCyCtB,MAAM,GAAN,CACExW,KAAM,SAAUlR,GACd,MAAMoc,EAAa,IAAI,GAA3B,EAEI,OADAA,EAAWC,eAAe9T,EAAM9H,MAAMe,QAAQ2X,cACvCzQ,QAAQ4a,IAAI,CACvB,oCACA,0CAAM,MAAN,GAAM,OAAN,OAIE5D,IAAK,SAAUhI,EAAIxP,GACjBwP,EAAG0P,SAAWlf,EAAS,GACvBwP,EAAGrC,OAAS,GACZqC,EAAGsN,MAAQ,EACXtN,EAAGhL,OAAS,EACZgL,EAAG+U,cAAcvkB,EAAS,MAI9B,QACEnO,KAAM,sBACNwpB,OAAQ,CAAChE,GAAyB,KAClCve,WAAY,CAAd,6HAEE,OACE,MAAO,CACLomB,SAAU,CAAhB,WACM/R,OAAQ,GACR2P,MAAO,EACPtY,OAAQ,EAER8W,0BAA0B,EAC1BZ,eAAgB,GAEhB8E,6BAA6B,IAIjC/mB,QAAS,CACP+qB,UAAW,SAAUI,GACnB,MAAM1P,EAAa,IAAI,GAA7B,EACMA,EAAWC,eAAe3gB,KAAK8E,OAAOC,MAAMe,QAAQ2X,cACpDiD,EAAWsQ,kBAAkBhxB,KAAK0rB,SAAS9qB,GAAI,CAArD,uCACQZ,KAAK+wB,cAAc90B,EAAMm0B,MAI7BW,cAAe,SAAU90B,EAAMm0B,GAC7BpwB,KAAK2Z,OAAS3Z,KAAK2Z,OAAOe,OAAOze,EAAKyM,OACtC1I,KAAKspB,MAAQrtB,EAAKqtB,MAClBtpB,KAAKgR,QAAU/U,EAAK8U,MAEhBqf,IACFA,EAAOE,SACHtwB,KAAKgR,QAAUhR,KAAKspB,OACtB8G,EAAOG,aAKb3b,KAAM,WACJ5U,KAAKye,oBAAqB,EAC1BzI,EAAOtH,gBAAgB1O,KAAK0rB,SAASzd,KAAK,IAG5Cgd,kBAAmB,SAAUjE,GAC3BhnB,KAAKknB,eAAiBF,EACtBhnB,KAAK8nB,0BAA2B,KC7GuT,MCOzV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI/nB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,UAAU,CAACE,YAAY,oCAAoC,CAACF,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,OAAO,CAACqB,GAAG,CAAC,OAAS,SAASC,GAAgC,OAAxBA,EAAOY,iBAAwBtC,EAAIitB,WAAW5vB,MAAM,KAAMsb,cAAc,CAACvY,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsC,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAgB,aAAEuB,WAAW,iBAAiBuX,IAAI,eAAexY,YAAY,iCAAiCc,MAAM,CAAC,KAAO,OAAO,YAAc,SAAS,aAAe,OAAO2X,SAAS,CAAC,MAAS/Y,EAAgB,cAAGyB,GAAG,CAAC,MAAQ,SAASC,GAAWA,EAAOsX,OAAOC,YAAqBjZ,EAAIktB,aAAaxrB,EAAOsX,OAAOja,WAAUiB,EAAImC,GAAG,SAAS/B,EAAG,MAAM,CAACE,YAAY,OAAOC,YAAY,CAAC,aAAa,SAASP,EAAI4G,GAAI5G,EAAmB,iBAAE,SAASmtB,GAAe,OAAO/sB,EAAG,IAAI,CAACf,IAAI8tB,EAAc7sB,YAAY,MAAMmB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIotB,mBAAmBD,MAAkB,CAACntB,EAAIoC,GAAGpC,EAAImG,GAAGgnB,SAAoB,WAAW/sB,EAAG,cAAc,CAACgB,MAAM,CAAC,MAAQpB,EAAIktB,gBAAiBltB,EAAIqtB,aAAertB,EAAI4Z,OAAO2P,MAAOnpB,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,cAAchC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACzZ,EAAI4G,GAAI5G,EAAI4Z,OAAY,OAAE,SAASqN,GAAO,OAAO7mB,EAAG,0BAA0B,CAACf,IAAI4nB,EAAMpmB,GAAGO,MAAM,CAAC,MAAQ6lB,EAAM,MAAQA,EAAMzgB,MAAM,SAAW,EAAE,YAAcygB,EAAM/Y,MAAM,CAAC9N,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIkrB,kBAAkBjE,MAAU,CAAC7mB,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAyB,UAAnBN,EAAIsL,MAAMa,KAAkB/L,EAAG,mBAAmB,CAACqB,GAAG,CAAC,SAAWzB,EAAIkxB,qBAAqB,CAAC9wB,EAAG,OAAO,CAACgB,MAAM,CAAC,KAAO,WAAWqY,KAAK,WAAW,CAACzZ,EAAIoC,GAAG,SAASpC,EAAI+B,KAAK3B,EAAG,6BAA6B,CAACgB,MAAM,CAAC,KAAOpB,EAAI+nB,yBAAyB,MAAQ/nB,EAAImnB,eAAe,MAAQnnB,EAAImnB,eAAe3gB,OAAO/E,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI+nB,0BAA2B,OAAW,GAAG3nB,EAAG,WAAW,CAACqZ,KAAK,UAAU,CAAEzZ,EAA0B,uBAAEI,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQzB,EAAIstB,qBAAqB,CAACttB,EAAIoC,GAAG,YAAYpC,EAAImG,GAAGnG,EAAI4Z,OAAO2P,MAAMgE,kBAAkB,iBAAiBvtB,EAAI+B,QAAQ,GAAG/B,EAAI+B,KAAM/B,EAAIqtB,cAAgBrtB,EAAI4Z,OAAO2P,MAAOnpB,EAAG,eAAe,CAACE,YAAY,QAAQ,CAACF,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACA,EAAG,IAAI,CAACJ,EAAIoC,GAAG,0BAA0B,GAAGpC,EAAI+B,KAAM/B,EAAIwtB,cAAgBxtB,EAAI4H,QAAQ2hB,MAAOnpB,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,eAAehC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACzZ,EAAI4G,GAAI5G,EAAI4H,QAAa,OAAE,SAAStB,GAAQ,OAAOlG,EAAG,2BAA2B,CAACf,IAAIiH,EAAOzF,GAAGO,MAAM,CAAC,OAASkF,IAAS,CAAClG,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIivB,mBAAmB3oB,MAAW,CAAClG,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAyB,WAAnBN,EAAIsL,MAAMa,KAAmB/L,EAAG,mBAAmB,CAACqB,GAAG,CAAC,SAAWzB,EAAImxB,sBAAsB,CAAC/wB,EAAG,OAAO,CAACgB,MAAM,CAAC,KAAO,WAAWqY,KAAK,WAAW,CAACzZ,EAAIoC,GAAG,SAASpC,EAAI+B,KAAK3B,EAAG,8BAA8B,CAACgB,MAAM,CAAC,KAAOpB,EAAI8oB,0BAA0B,OAAS9oB,EAAIqoB,iBAAiB5mB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAI8oB,2BAA4B,OAAW,GAAG1oB,EAAG,WAAW,CAACqZ,KAAK,UAAU,CAAEzZ,EAA2B,wBAAEI,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQzB,EAAIytB,sBAAsB,CAACztB,EAAIoC,GAAG,YAAYpC,EAAImG,GAAGnG,EAAI4H,QAAQ2hB,MAAMgE,kBAAkB,kBAAkBvtB,EAAI+B,QAAQ,GAAG/B,EAAI+B,KAAM/B,EAAIwtB,eAAiBxtB,EAAI4H,QAAQ2hB,MAAOnpB,EAAG,eAAe,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACA,EAAG,IAAI,CAACJ,EAAIoC,GAAG,2BAA2B,GAAGpC,EAAI+B,KAAM/B,EAAI0tB,aAAe1tB,EAAI6H,OAAO0hB,MAAOnpB,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,cAAchC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACzZ,EAAI4G,GAAI5G,EAAI6H,OAAY,OAAE,SAASrB,GAAO,OAAOpG,EAAG,0BAA0B,CAACf,IAAImH,EAAM3F,GAAGO,MAAM,CAAC,MAAQoF,GAAO/E,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAI4f,WAAWpZ,MAAU,CAAExG,EAAsB,mBAAEI,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,8CAA8C,CAACF,EAAG,gBAAgB,CAACgB,MAAM,CAAC,YAAcpB,EAAI0hB,YAAYlb,GAAO,OAASA,EAAMF,OAAO,MAAQE,EAAMlI,KAAK,SAAW,GAAG,UAAY,OAAO,KAAK0B,EAAI+B,KAAK3B,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIgvB,kBAAkBxoB,MAAU,CAACpG,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAyB,UAAnBN,EAAIsL,MAAMa,KAAkB/L,EAAG,mBAAmB,CAACqB,GAAG,CAAC,SAAWzB,EAAIoxB,qBAAqB,CAAChxB,EAAG,OAAO,CAACgB,MAAM,CAAC,KAAO,WAAWqY,KAAK,WAAW,CAACzZ,EAAIoC,GAAG,SAASpC,EAAI+B,KAAK3B,EAAG,6BAA6B,CAACgB,MAAM,CAAC,KAAOpB,EAAIopB,yBAAyB,MAAQppB,EAAIqkB,gBAAgB5iB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIopB,0BAA2B,OAAW,GAAGhpB,EAAG,WAAW,CAACqZ,KAAK,UAAU,CAAEzZ,EAA0B,uBAAEI,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQzB,EAAI2tB,qBAAqB,CAAC3tB,EAAIoC,GAAG,YAAYpC,EAAImG,GAAGnG,EAAI6H,OAAO0hB,MAAMgE,kBAAkB,iBAAiBvtB,EAAI+B,QAAQ,GAAG/B,EAAI+B,KAAM/B,EAAI0tB,cAAgB1tB,EAAI6H,OAAO0hB,MAAOnpB,EAAG,eAAe,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACA,EAAG,IAAI,CAACJ,EAAIoC,GAAG,0BAA0B,GAAGpC,EAAI+B,KAAM/B,EAAI8tB,gBAAkB9tB,EAAI4rB,UAAUrC,MAAOnpB,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,IAAI,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,iBAAiBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACzZ,EAAI4G,GAAI5G,EAAI4rB,UAAe,OAAE,SAASD,GAAU,OAAOvrB,EAAG,6BAA6B,CAACf,IAAIssB,EAAS9qB,GAAGO,MAAM,CAAC,SAAWuqB,IAAW,CAACvrB,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACqB,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAO1B,EAAIysB,qBAAqBd,MAAa,CAACvrB,EAAG,OAAO,CAACE,YAAY,sBAAsB,CAACF,EAAG,IAAI,CAACE,YAAY,0CAA0C,MAAyB,aAAnBN,EAAIsL,MAAMa,KAAqB/L,EAAG,mBAAmB,CAACqB,GAAG,CAAC,SAAWzB,EAAIqxB,wBAAwB,CAACjxB,EAAG,OAAO,CAACgB,MAAM,CAAC,KAAO,WAAWqY,KAAK,WAAW,CAACzZ,EAAIoC,GAAG,SAASpC,EAAI+B,KAAK3B,EAAG,gCAAgC,CAACgB,MAAM,CAAC,KAAOpB,EAAIisB,4BAA4B,SAAWjsB,EAAI8rB,mBAAmBrqB,GAAG,CAAC,MAAQ,SAASC,GAAQ1B,EAAIisB,6BAA8B,OAAW,GAAG7rB,EAAG,WAAW,CAACqZ,KAAK,UAAU,CAAEzZ,EAA6B,0BAAEI,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,IAAI,CAACE,YAAY,cAAc,CAACF,EAAG,IAAI,CAACE,YAAY,sCAAsCmB,GAAG,CAAC,MAAQzB,EAAI+tB,wBAAwB,CAAC/tB,EAAIoC,GAAG,YAAYpC,EAAImG,GAAGnG,EAAI4rB,UAAUrC,MAAMgE,kBAAkB,oBAAoBvtB,EAAI+B,QAAQ,GAAG/B,EAAI+B,KAAM/B,EAAI8tB,iBAAmB9tB,EAAI4rB,UAAUrC,MAAOnpB,EAAG,eAAe,CAACA,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACA,EAAG,IAAI,CAACJ,EAAIoC,GAAG,6BAA6B,GAAGpC,EAAI+B,MAAM,IACriO,GAAkB,CAAC,WAAa,IAAI/B,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,OAAO,CAACE,YAAY,gBAAgB,CAACF,EAAG,IAAI,CAACE,YAAY,wBCDlK,GAAS,WAAa,IAAIN,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,MAAM,CAACE,YAAY,yCAAyCmB,GAAG,CAAC,MAAQzB,EAAImlB,cAAc,CAAC/kB,EAAG,KAAK,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIsG,OAAOhI,WAAW8B,EAAG,MAAM,CAACE,YAAY,eAAe,CAACN,EAAIQ,GAAG,YAAY,MAC3V,GAAkB,GCWtB,IACElC,KAAM,wBACNgG,MAAO,CAAC,UAERY,QAAS,CACPigB,YAAa,WACXllB,KAAKkF,QAAQnI,KAAK,CAAxB,mDClB+V,MCO3V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCkKf,IACEsB,KAAM,oBACNiH,WAAY,CAAd,6SAEE,OACE,MAAO,CACL2nB,aAAc,GACdtT,OAAQ,CAAd,kBACMhS,QAAS,CAAf,kBACMC,OAAQ,CAAd,kBACM+jB,UAAW,CAAjB,kBAEMtgB,MAAO,GACPgmB,aAAc,GAEdvJ,0BAA0B,EAC1BZ,eAAgB,GAEhBiC,0BAA0B,EAC1B/E,eAAgB,GAEhByE,2BAA2B,EAC3BT,gBAAiB,GAEjB4D,6BAA6B,EAC7BH,kBAAmB,GAEnByF,iBAAkB,CAAC,QAAS,SAAU,QAAS,cAInD5sB,SAAU,CACR,kBACE,OAAO1E,KAAK8E,OAAOC,MAAMmE,gBAAgB4H,OAAOmC,IAAWA,EAAOpO,WAAW,YAG/E,cACE,OAAO7E,KAAK2E,OAAO0G,MAAMa,MAAQlM,KAAK2E,OAAO0G,MAAMa,KAAK4H,SAAS,UAEnE,yBACE,OAAO9T,KAAK2Z,OAAO2P,MAAQtpB,KAAK2Z,OAAOjR,MAAMjM,QAG/C,eACE,OAAOuD,KAAK2E,OAAO0G,MAAMa,MAAQlM,KAAK2E,OAAO0G,MAAMa,KAAK4H,SAAS,WAEnE,0BACE,OAAO9T,KAAK2H,QAAQ2hB,MAAQtpB,KAAK2H,QAAQe,MAAMjM,QAGjD,cACE,OAAOuD,KAAK2E,OAAO0G,MAAMa,MAAQlM,KAAK2E,OAAO0G,MAAMa,KAAK4H,SAAS,UAEnE,yBACE,OAAO9T,KAAK4H,OAAO0hB,MAAQtpB,KAAK4H,OAAOc,MAAMjM,QAG/C,iBACE,OAAOuD,KAAK2E,OAAO0G,MAAMa,MAAQlM,KAAK2E,OAAO0G,MAAMa,KAAK4H,SAAS,aAEnE,4BACE,OAAO9T,KAAK2rB,UAAUrC,MAAQtpB,KAAK2rB,UAAUjjB,MAAMjM,QAGrD,qBACE,OAAOuD,KAAK8E,OAAOS,QAAQC,gBAAgB,eAAgB,qCAAqC1G,QAIpGmG,QAAS,CACPssB,MAAO,WACLvxB,KAAK2Z,OAAS,CAApB,kBACM3Z,KAAK2H,QAAU,CAArB,kBACM3H,KAAK4H,OAAS,CAApB,kBACM5H,KAAK2rB,UAAY,CAAvB,mBAGI1Y,OAAQ,WAIN,GAHAjT,KAAKuxB,SAGAvxB,KAAKqL,MAAMA,OAA8B,KAArBrL,KAAKqL,MAAMA,OAAgBrL,KAAKqL,MAAMA,MAAMxG,WAAW,UAG9E,OAFA7E,KAAKitB,aAAe,QACpBjtB,KAAKoZ,MAAMqV,aAAanV,QAI1BtZ,KAAKitB,aAAejtB,KAAKqL,MAAMA,MAC/BrL,KAAKqxB,aAAatgB,MAAQ/Q,KAAKqL,MAAM0F,MAAQ/Q,KAAKqL,MAAM0F,MAAQ,GAChE/Q,KAAKqxB,aAAargB,OAAShR,KAAKqL,MAAM2F,OAAShR,KAAKqL,MAAM2F,OAAS,EAEnEhR,KAAK8E,OAAOE,OAAO,EAAzB,kBAEMhF,KAAKwxB,cAGPC,eAAgB,WACd,OAAOzb,EAAOlQ,UAAUqI,KAAK,EAAnC,WACQnO,KAAKqxB,aAAaK,OAASz1B,EAAK01B,eAEhC,MAAMjR,EAAa,IAAI,GAA/B,EACQA,EAAWC,eAAe1kB,EAAKwhB,cAE/B,MAAMhT,EAAQzK,KAAKqL,MAAMa,KAAK0lB,MAAM,KAAK9gB,OAAO5E,GAAQlM,KAAKsxB,iBAAiBxd,SAAS5H,IACvF,OAAOwU,EAAWzN,OAAOjT,KAAKqL,MAAMA,MAAOZ,EAAOzK,KAAKqxB,iBAI3DG,WAAY,WACVxxB,KAAKyxB,iBAAiBtjB,KAAKlS,IACzB+D,KAAK2Z,OAAS1d,EAAK0d,OAAS1d,EAAK0d,OAAS,CAAlD,kBACQ3Z,KAAK2H,QAAU1L,EAAK0L,QAAU1L,EAAK0L,QAAU,CAArD,kBACQ3H,KAAK4H,OAAS3L,EAAK2L,OAAS3L,EAAK2L,OAAS,CAAlD,kBACQ5H,KAAK2rB,UAAY1vB,EAAK0vB,UAAY1vB,EAAK0vB,UAAY,CAA3D,qBAIIsF,mBAAoB,SAAUb,GAC5BpwB,KAAKyxB,iBAAiBtjB,KAAKlS,IACzB+D,KAAK2Z,OAAOjR,MAAQ1I,KAAK2Z,OAAOjR,MAAMgS,OAAOze,EAAK0d,OAAOjR,OACzD1I,KAAK2Z,OAAO2P,MAAQrtB,EAAK0d,OAAO2P,MAChCtpB,KAAKqxB,aAAargB,QAAU/U,EAAK0d,OAAO5I,MAExCqf,EAAOE,SACHtwB,KAAKqxB,aAAargB,QAAUhR,KAAK2Z,OAAO2P,OAC1C8G,EAAOG,cAKbW,oBAAqB,SAAUd,GAC7BpwB,KAAKyxB,iBAAiBtjB,KAAKlS,IACzB+D,KAAK2H,QAAQe,MAAQ1I,KAAK2H,QAAQe,MAAMgS,OAAOze,EAAK0L,QAAQe,OAC5D1I,KAAK2H,QAAQ2hB,MAAQrtB,EAAK0L,QAAQ2hB,MAClCtpB,KAAKqxB,aAAargB,QAAU/U,EAAK0L,QAAQoJ,MAEzCqf,EAAOE,SACHtwB,KAAKqxB,aAAargB,QAAUhR,KAAK2H,QAAQ2hB,OAC3C8G,EAAOG,cAKbY,mBAAoB,SAAUf,GAC5BpwB,KAAKyxB,iBAAiBtjB,KAAKlS,IACzB+D,KAAK4H,OAAOc,MAAQ1I,KAAK4H,OAAOc,MAAMgS,OAAOze,EAAK2L,OAAOc,OACzD1I,KAAK4H,OAAO0hB,MAAQrtB,EAAK2L,OAAO0hB,MAChCtpB,KAAKqxB,aAAargB,QAAU/U,EAAK2L,OAAOmJ,MAExCqf,EAAOE,SACHtwB,KAAKqxB,aAAargB,QAAUhR,KAAK4H,OAAO0hB,OAC1C8G,EAAOG,cAKba,sBAAuB,SAAUhB,GAC/BpwB,KAAKyxB,iBAAiBtjB,KAAKlS,IACzB+D,KAAK2rB,UAAUjjB,MAAQ1I,KAAK2rB,UAAUjjB,MAAMgS,OAAOze,EAAK0vB,UAAUjjB,OAClE1I,KAAK2rB,UAAUrC,MAAQrtB,EAAK0vB,UAAUrC,MACtCtpB,KAAKqxB,aAAargB,QAAU/U,EAAK0vB,UAAU5a,MAE3Cqf,EAAOE,SACHtwB,KAAKqxB,aAAargB,QAAUhR,KAAK2rB,UAAUrC,OAC7C8G,EAAOG,cAKbvD,WAAY,WACLhtB,KAAKitB,eAIVjtB,KAAKkF,QAAQnI,KAAK,CAChB6H,KAAM,kBACNyG,MAAO,CACLa,KAAM,gDACNb,MAAOrL,KAAKitB,aACZlc,MAAO,EACPC,OAAQ,KAGZhR,KAAKoZ,MAAMqV,aAAaK,SAG1BzB,mBAAoB,WAClBrtB,KAAKkF,QAAQnI,KAAK,CAChB6H,KAAM,kBACNyG,MAAO,CACLa,KAAM,QACNb,MAAOrL,KAAK2E,OAAO0G,MAAMA,UAK/BmiB,oBAAqB,WACnBxtB,KAAKkF,QAAQnI,KAAK,CAChB6H,KAAM,kBACNyG,MAAO,CACLa,KAAM,SACNb,MAAOrL,KAAK2E,OAAO0G,MAAMA,UAK/BqiB,mBAAoB,WAClB1tB,KAAKkF,QAAQnI,KAAK,CAChB6H,KAAM,kBACNyG,MAAO,CACLa,KAAM,QACNb,MAAOrL,KAAK2E,OAAO0G,MAAMA,UAK/ByiB,sBAAuB,WACrB9tB,KAAKkF,QAAQnI,KAAK,CAChB6H,KAAM,kBACNyG,MAAO,CACLa,KAAM,WACNb,MAAOrL,KAAK2E,OAAO0G,MAAMA,UAK/B8hB,mBAAoB,SAAU9hB,GAC5BrL,KAAKitB,aAAe5hB,EACpBrL,KAAKgtB,cAGP/B,kBAAmB,SAAUjE,GAC3BhnB,KAAKknB,eAAiBF,EACtBhnB,KAAK8nB,0BAA2B,GAGlCiH,kBAAmB,SAAUxoB,GAC3BvG,KAAKokB,eAAiB7d,EACtBvG,KAAKmpB,0BAA2B,GAGlC6F,mBAAoB,SAAU3oB,GAC5BrG,KAAKooB,gBAAkB/hB,EACvBrG,KAAK6oB,2BAA4B,GAGnC2D,qBAAsB,SAAUd,GAC9B1rB,KAAK6rB,kBAAoBH,EACzB1rB,KAAKgsB,6BAA8B,GAGrCrM,WAAY,SAAUpZ,GACpBvG,KAAKkF,QAAQnI,KAAK,CAAxB,sCAGI0kB,YAAa,SAAUlb,GACrB,OAAIA,EAAMspB,QAAUtpB,EAAMspB,OAAOpzB,OAAS,EACjC8J,EAAMspB,OAAO,GAAG1d,IAElB,KAIX+c,QAAS,WACPlvB,KAAKqL,MAAQrL,KAAK2E,OAAO0G,MACzBrL,KAAKiT,UAGPjN,MAAO,CACL,OAAJ,KACMhG,KAAKqL,MAAQ/G,EAAG+G,MAChBrL,KAAKiT,YCncgV,MCOvV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIlT,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,iBAAiBA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,MAAM,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,oBAAoBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,gDAAgDhC,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACN,EAAIoC,GAAG,sGAAsGhC,EAAG,oBAAoB,CAACgB,MAAM,CAAC,cAAgB,eAAe,YAAc,6BAA6B,CAAChB,EAAG,WAAW,CAACqZ,KAAK,SAAS,CAACzZ,EAAIoC,GAAG,iBAAiB,GAAGhC,EAAG,oBAAoB,CAACgB,MAAM,CAAC,cAAgB,eAAe,YAAc,yBAAyB,CAAChB,EAAG,WAAW,CAACqZ,KAAK,SAAS,CAACzZ,EAAIoC,GAAG,aAAa,GAAGhC,EAAG,oBAAoB,CAACgB,MAAM,CAAC,cAAgB,eAAe,YAAc,4BAA4B,CAAChB,EAAG,WAAW,CAACqZ,KAAK,SAAS,CAACzZ,EAAIoC,GAAG,gBAAgB,GAAGhC,EAAG,oBAAoB,CAACgB,MAAM,CAAC,cAAgB,eAAe,YAAc,8BAA8B,CAAChB,EAAG,WAAW,CAACqZ,KAAK,SAAS,CAACzZ,EAAIoC,GAAG,kBAAkB,GAAGhC,EAAG,oBAAoB,CAACgB,MAAM,CAAC,cAAgB,eAAe,YAAc,yBAAyB,CAAChB,EAAG,WAAW,CAACqZ,KAAK,SAAS,CAACzZ,EAAIoC,GAAG,aAAa,GAAGhC,EAAG,oBAAoB,CAACgB,MAAM,CAAC,cAAgB,eAAe,YAAc,yBAAyB,CAAChB,EAAG,WAAW,CAACqZ,KAAK,SAAS,CAACzZ,EAAIoC,GAAG,aAAa,GAAGhC,EAAG,oBAAoB,CAACgB,MAAM,CAAC,cAAgB,eAAe,YAAc,0BAA0B,CAAChB,EAAG,WAAW,CAACqZ,KAAK,SAAS,CAACzZ,EAAIoC,GAAG,cAAc,IAAI,IAAI,GAAGhC,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,MAAM,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,mBAAmBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,oBAAoB,CAACgB,MAAM,CAAC,cAAgB,eAAe,YAAc,sCAAsC,CAAChB,EAAG,WAAW,CAACqZ,KAAK,SAAS,CAACzZ,EAAIoC,GAAG,wCAAwC,IAAI,IAAI,GAAGhC,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,MAAM,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,wBAAwBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,oBAAoB,CAACgB,MAAM,CAAC,cAAgB,eAAe,YAAc,8BAA8B,CAAChB,EAAG,WAAW,CAACqZ,KAAK,SAAS,CAACzZ,EAAIoC,GAAG,oBAAoBhC,EAAG,WAAW,CAACqZ,KAAK,QAAQ,CAACzZ,EAAIoC,GAAG,8FAAgG,GAAGhC,EAAG,qBAAqB,CAACgB,MAAM,CAAC,cAAgB,eAAe,YAAc,0BAA0B,UAAYpB,EAAImK,0CAA0C,YAAc,WAAW,CAAC/J,EAAG,WAAW,CAACqZ,KAAK,SAAS,CAACzZ,EAAIoC,GAAG,0CAA0ChC,EAAG,WAAW,CAACqZ,KAAK,QAAQ,CAACrZ,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIoC,GAAG,kGAAoGhC,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIoC,GAAG,gDAAgDhC,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIoC,GAAG,kIAAkIhC,EAAG,OAAO,CAACJ,EAAIoC,GAAG,2BAA2BpC,EAAIoC,GAAG,oFAAsFhC,EAAG,WAAW,IAAI,IAAI,GAAGA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,MAAM,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,2BAA2BhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,oBAAoB,CAACgB,MAAM,CAAC,cAAgB,eAAe,YAAc,yBAAyB,CAAChB,EAAG,WAAW,CAACqZ,KAAK,SAAS,CAACzZ,EAAIoC,GAAG,oEAAsE,IAAI,IAAI,IAAI,IACvnH,GAAkB,GCDlB,GAAS,WAAa,IAAIpC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,UAAU,CAACE,YAAY,2BAA2B,CAACF,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,MAAM,CAACE,YAAY,yBAAyB,CAACF,EAAG,MAAM,CAACE,YAAY,6BAA6B,CAACF,EAAG,KAAK,CAACA,EAAG,cAAc,CAACgB,MAAM,CAAC,IAAM,KAAK,GAAK,yBAAyB,eAAe,cAAc,CAAChB,EAAG,IAAI,CAACA,EAAG,OAAO,GAAG,CAACJ,EAAIoC,GAAG,sBAAsBhC,EAAG,cAAc,CAACgB,MAAM,CAAC,IAAM,KAAK,GAAK,4BAA4B,eAAe,cAAc,CAAChB,EAAG,IAAI,CAACA,EAAG,OAAO,GAAG,CAACJ,EAAIoC,GAAG,2BAA2BhC,EAAG,cAAc,CAACgB,MAAM,CAAC,IAAM,KAAK,GAAK,oBAAoB,eAAe,cAAc,CAAChB,EAAG,IAAI,CAACA,EAAG,OAAO,GAAG,CAACJ,EAAIoC,GAAG,iBAAiBhC,EAAG,cAAc,CAACgB,MAAM,CAAC,IAAM,KAAK,GAAK,4BAA4B,eAAe,cAAc,CAAChB,EAAG,IAAI,CAACA,EAAG,OAAO,GAAG,CAACJ,EAAIoC,GAAG,0BAA0B,cACl6B,GAAkB,GCmCtB,IACE9D,KAAM,eAENqG,SAAU,ICvC0U,MCOlV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI3E,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,QAAQ,CAACE,YAAY,YAAY,CAACF,EAAG,QAAQ,CAAC0Y,IAAI,oBAAoB1X,MAAM,CAAC,KAAO,YAAY2X,SAAS,CAAC,QAAU/Y,EAAIjB,OAAO0C,GAAG,CAAC,OAASzB,EAAI8xB,oBAAoB9xB,EAAIQ,GAAG,SAASJ,EAAG,IAAI,CAACE,YAAY,YAAY0B,MAAM,CACnV,gBAAsC,YAArBhC,EAAI+xB,aACrB,kBAAwC,UAArB/xB,EAAI+xB,eACtB,CAAC/xB,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAIgyB,UAAU,GAAIhyB,EAAI8e,OAAO,QAAS1e,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIQ,GAAG,SAAS,GAAGR,EAAI+B,QACpH,GAAkB,GCoBtB,IACEzD,KAAM,mBAENgG,MAAO,CAAC,gBAAiB,eAEzB,OACE,MAAO,CACL2tB,WAAY,IACZC,SAAU,EAGVH,aAAc,KAIlBptB,SAAU,CACR,WACE,OAAO1E,KAAK8E,OAAOC,MAAM0C,SAASC,WAAWiC,KAAKG,GAAQA,EAAKzL,OAAS2B,KAAKkyB,gBAG/E,SACE,OAAKlyB,KAAKuK,SAGHvK,KAAKuK,SAASN,QAAQN,KAAKG,GAAQA,EAAKzL,OAAS2B,KAAKmyB,aAFpD,IAKX,QACE,OAAOnyB,KAAKgK,OAAOlL,OAGrB,OACE,MAA0B,YAAtBkB,KAAK8xB,aACA,kBACf,4BACe,yBAEF,KAIX7sB,QAAS,CACP,mBACMjF,KAAKiyB,QAAU,IACjBtyB,OAAO4d,aAAavd,KAAKiyB,SACzBjyB,KAAKiyB,SAAW,GAGlBjyB,KAAK8xB,aAAe,GACpB,MAAMM,EAAWpyB,KAAKoZ,MAAMiZ,kBAAkB9X,QAC1C6X,IAAapyB,KAAKlB,QACpBkB,KAAKiyB,QAAUtyB,OAAO0M,WAAWrM,KAAKsyB,eAAgBtyB,KAAKgyB,cAI/D,iBACEhyB,KAAKiyB,SAAW,EAEhB,MAAMG,EAAWpyB,KAAKoZ,MAAMiZ,kBAAkB9X,QAC9C,GAAI6X,IAAapyB,KAAKlB,MAEpB,YADAkB,KAAK8xB,aAAe,IAItB,MAAM9nB,EAAS,CACbO,SAAUvK,KAAKuK,SAASlM,KACxBA,KAAM2B,KAAKmyB,YACXrzB,MAAOszB,GAETpc,EAAO9I,gBAAgBlN,KAAKuK,SAASlM,KAAM2L,GAAQmE,KAAK,KACtDnO,KAAK8E,OAAOE,OAAO,EAA3B,GACQhF,KAAK8xB,aAAe,YAC5B,WACQ9xB,KAAK8xB,aAAe,QACpB9xB,KAAKoZ,MAAMiZ,kBAAkB9X,QAAUva,KAAKlB,QACpD,aACQkB,KAAKiyB,QAAUtyB,OAAO0M,WAAWrM,KAAKuyB,aAAcvyB,KAAKgyB,eAI7DO,aAAc,WACZvyB,KAAK8xB,aAAe,MCzGgU,MCOtV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI/xB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,WAAW,CAACgB,MAAM,CAAC,SAAWpB,EAAIoW,WAAW,CAAChW,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,QAAQ,CAACE,YAAY,gCAAgC,CAACN,EAAIQ,GAAG,SAASJ,EAAG,IAAI,CAACE,YAAY,YAAY0B,MAAM,CACpR,gBAAsC,YAArBhC,EAAI+xB,aACrB,kBAAwC,UAArB/xB,EAAI+xB,eACtB,CAAC/xB,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAIgyB,UAAU,GAAG5xB,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,QAAQ,CAAC0Y,IAAI,gBAAgBxY,YAAY,QAAQc,MAAM,CAAC,KAAO,OAAO,YAAcpB,EAAIyyB,aAAa1Z,SAAS,CAAC,MAAQ/Y,EAAIjB,OAAO0C,GAAG,CAAC,MAAQzB,EAAI8xB,sBAAuB9xB,EAAI8e,OAAO,QAAS1e,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIQ,GAAG,SAAS,GAAGR,EAAI+B,UACnU,GAAkB,GCwBtB,IACEzD,KAAM,oBAENgG,MAAO,CAAC,gBAAiB,cAAe,cAAe,YAEvD,OACE,MAAO,CACL2tB,WAAY,IACZC,SAAU,EAGVH,aAAc,KAIlBptB,SAAU,CACR,WACE,OAAO1E,KAAK8E,OAAOC,MAAM0C,SAASC,WAAWiC,KAAKG,GAAQA,EAAKzL,OAAS2B,KAAKkyB,gBAG/E,SACE,OAAKlyB,KAAKuK,SAGHvK,KAAKuK,SAASN,QAAQN,KAAKG,GAAQA,EAAKzL,OAAS2B,KAAKmyB,aAFpD,IAKX,QACE,OAAOnyB,KAAKgK,OAAOlL,OAGrB,OACE,MAA0B,YAAtBkB,KAAK8xB,aACA,kBACf,4BACe,yBAEF,KAIX7sB,QAAS,CACP,mBACMjF,KAAKiyB,QAAU,IACjBtyB,OAAO4d,aAAavd,KAAKiyB,SACzBjyB,KAAKiyB,SAAW,GAGlBjyB,KAAK8xB,aAAe,GACpB,MAAMM,EAAWpyB,KAAKoZ,MAAMqZ,cAAc3zB,MACtCszB,IAAapyB,KAAKlB,QACpBkB,KAAKiyB,QAAUtyB,OAAO0M,WAAWrM,KAAKsyB,eAAgBtyB,KAAKgyB,cAI/D,iBACEhyB,KAAKiyB,SAAW,EAEhB,MAAMG,EAAWpyB,KAAKoZ,MAAMqZ,cAAc3zB,MAC1C,GAAIszB,IAAapyB,KAAKlB,MAEpB,YADAkB,KAAK8xB,aAAe,IAItB,MAAM9nB,EAAS,CACbO,SAAUvK,KAAKuK,SAASlM,KACxBA,KAAM2B,KAAKmyB,YACXrzB,MAAOszB,GAETpc,EAAO9I,gBAAgBlN,KAAKuK,SAASlM,KAAM2L,GAAQmE,KAAK,KACtDnO,KAAK8E,OAAOE,OAAO,EAA3B,GACQhF,KAAK8xB,aAAe,YAC5B,WACQ9xB,KAAK8xB,aAAe,QACpB9xB,KAAKoZ,MAAMqZ,cAAc3zB,MAAQkB,KAAKlB,QAC9C,aACQkB,KAAKiyB,QAAUtyB,OAAO0M,WAAWrM,KAAKuyB,aAAcvyB,KAAKgyB,eAI7DO,aAAc,WACZvyB,KAAK8xB,aAAe,MC7GiU,MCOvV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI/xB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,WAAW,CAACgB,MAAM,CAAC,SAAWpB,EAAIoW,WAAW,CAAChW,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,QAAQ,CAACE,YAAY,gCAAgC,CAACN,EAAIQ,GAAG,SAASJ,EAAG,IAAI,CAACE,YAAY,YAAY0B,MAAM,CACpR,gBAAsC,YAArBhC,EAAI+xB,aACrB,kBAAwC,UAArB/xB,EAAI+xB,eACtB,CAAC/xB,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGnG,EAAIgyB,UAAU,GAAG5xB,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,QAAQ,CAAC0Y,IAAI,kBAAkBxY,YAAY,QAAQC,YAAY,CAAC,MAAQ,QAAQa,MAAM,CAAC,KAAO,SAAS,IAAM,IAAI,YAAcpB,EAAIyyB,aAAa1Z,SAAS,CAAC,MAAQ/Y,EAAIjB,OAAO0C,GAAG,CAAC,MAAQzB,EAAI8xB,sBAAuB9xB,EAAI8e,OAAO,QAAS1e,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIQ,GAAG,SAAS,GAAGR,EAAI+B,UAC9W,GAAkB,GC4BtB,IACEzD,KAAM,mBAENgG,MAAO,CAAC,gBAAiB,cAAe,cAAe,YAEvD,OACE,MAAO,CACL2tB,WAAY,IACZC,SAAU,EAEVH,aAAc,KAIlBptB,SAAU,CACR,WACE,OAAO1E,KAAK8E,OAAOC,MAAM0C,SAASC,WAAWiC,KAAKG,GAAQA,EAAKzL,OAAS2B,KAAKkyB,gBAG/E,SACE,OAAKlyB,KAAKuK,SAGHvK,KAAKuK,SAASN,QAAQN,KAAKG,GAAQA,EAAKzL,OAAS2B,KAAKmyB,aAFpD,IAKX,QACE,OAAOnyB,KAAKgK,OAAOlL,OAGrB,OACE,MAA0B,YAAtBkB,KAAK8xB,aACA,kBACf,4BACe,yBAEF,KAIX7sB,QAAS,CACP,mBACMjF,KAAKiyB,QAAU,IACjBtyB,OAAO4d,aAAavd,KAAKiyB,SACzBjyB,KAAKiyB,SAAW,GAGlBjyB,KAAK8xB,aAAe,GACpB,MAAMM,EAAWpyB,KAAKoZ,MAAMsZ,gBAAgB5zB,MACxCszB,IAAapyB,KAAKlB,QACpBkB,KAAKiyB,QAAUtyB,OAAO0M,WAAWrM,KAAKsyB,eAAgBtyB,KAAKgyB,cAI/D,iBACEhyB,KAAKiyB,SAAW,EAEhB,MAAMG,EAAWpyB,KAAKoZ,MAAMsZ,gBAAgB5zB,MAC5C,GAAIszB,IAAapyB,KAAKlB,MAEpB,YADAkB,KAAK8xB,aAAe,IAItB,MAAM9nB,EAAS,CACbO,SAAUvK,KAAKuK,SAASlM,KACxBA,KAAM2B,KAAKmyB,YACXrzB,MAAOgkB,SAASsP,EAAU,KAE5Bpc,EAAO9I,gBAAgBlN,KAAKuK,SAASlM,KAAM2L,GAAQmE,KAAK,KACtDnO,KAAK8E,OAAOE,OAAO,EAA3B,GACQhF,KAAK8xB,aAAe,YAC5B,WACQ9xB,KAAK8xB,aAAe,QACpB9xB,KAAKoZ,MAAMsZ,gBAAgB5zB,MAAQkB,KAAKlB,QAChD,aACQkB,KAAKiyB,QAAUtyB,OAAO0M,WAAWrM,KAAKuyB,aAAcvyB,KAAKgyB,eAI7DO,aAAc,WACZvyB,KAAK8xB,aAAe,MChHgU,MCOtV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QCsFf,IACEzzB,KAAM,2BACNiH,WAAY,CAAd,oGAEEZ,SAAU,CACR,4CACE,OAAO1E,KAAK8E,OAAOS,QAAQ2E,6CC9GiU,MCO9V,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAInK,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,iBAAiBA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,MAAM,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,eAAehC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,IAAI,CAACJ,EAAIoC,GAAG,oLAAoLhC,EAAG,IAAI,CAACJ,EAAIoC,GAAG,kGAAmGpC,EAAI+F,QAA4B,qBAAE3F,EAAG,oBAAoB,CAACgB,MAAM,CAAC,cAAgB,UAAU,YAAc,+BAA+B,CAAChB,EAAG,WAAW,CAACqZ,KAAK,SAAS,CAACzZ,EAAIoC,GAAG,eAAe,GAAGpC,EAAI+B,KAAK3B,EAAG,oBAAoB,CAACgB,MAAM,CAAC,cAAgB,UAAU,YAAc,+BAA+B,CAAChB,EAAG,WAAW,CAACqZ,KAAK,SAAS,CAACzZ,EAAIoC,GAAG,cAAchC,EAAG,IAAI,CAACgB,MAAM,CAAC,KAAO,6BAA6B,CAACpB,EAAIoC,GAAG,8BAA8BpC,EAAIoC,GAAG,QAAQ,GAAGhC,EAAG,oBAAoB,CAACgB,MAAM,CAAC,cAAgB,UAAU,YAAc,uCAAuC,CAAChB,EAAG,WAAW,CAACqZ,KAAK,SAAS,CAACzZ,EAAIoC,GAAG,wBAAwBhC,EAAG,IAAI,CAACgB,MAAM,CAAC,KAAO,iCAAiC,CAACpB,EAAIoC,GAAG,kCAAkCpC,EAAIoC,GAAG,QAAQ,IAAI,IAAI,IAAI,IACl2C,GAAkB,GCmCtB,IACE9D,KAAM,sBACNiH,WAAY,CAAd,2DAEEZ,SAAU,CACR,UACE,OAAO1E,KAAK8E,OAAOC,MAAMe,WC1C8T,MCOzV,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAI/F,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,iBAAiBA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,MAAM,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,eAAehC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAAGzZ,EAAI+F,QAAQ6sB,kBAA+K5yB,EAAI+B,KAAhK3B,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,IAAI,CAACJ,EAAIoC,GAAG,4FAAsGpC,EAAI+F,QAAyB,kBAAE3F,EAAG,MAAM,CAACA,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,IAAI,CAACJ,EAAIoC,GAAG,6CAA6CpC,EAAIoC,GAAG,MAAOpC,EAAkB,eAAEI,EAAG,OAAO,CAACJ,EAAIoC,GAAG,wLAAwLpC,EAAI+B,OAAQ/B,EAAkB,eAAEI,EAAG,MAAM,CAACA,EAAG,IAAI,CAACE,YAAY,WAAW,CAACF,EAAG,IAAI,CAACJ,EAAIoC,GAAG,gBAAgBpC,EAAIoC,GAAG,uDAAwDpC,EAAI+F,QAA4B,qBAAE3F,EAAG,IAAI,CAACE,YAAY,wBAAwB,CAACN,EAAIoC,GAAG,kBAAkBhC,EAAG,IAAI,CAACA,EAAG,OAAO,CAACJ,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI+F,QAAQ8sB,wBAAwB7yB,EAAI+B,KAAM/B,EAAI+F,QAAQ6sB,oBAAsB5yB,EAAI+F,QAAQ+sB,qBAAsB1yB,EAAG,OAAO,CAACqB,GAAG,CAAC,OAAS,SAASC,GAAgC,OAAxBA,EAAOY,iBAAwBtC,EAAI+yB,iBAAiB11B,MAAM,KAAMsb,cAAc,CAACvY,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAIgzB,WAAe,KAAEzxB,WAAW,oBAAoBjB,YAAY,QAAQc,MAAM,CAAC,KAAO,OAAO,YAAc,YAAY2X,SAAS,CAAC,MAAS/Y,EAAIgzB,WAAe,MAAGvxB,GAAG,CAAC,MAAQ,SAASC,GAAWA,EAAOsX,OAAOC,WAAqBjZ,EAAIkZ,KAAKlZ,EAAIgzB,WAAY,OAAQtxB,EAAOsX,OAAOja,WAAWqB,EAAG,IAAI,CAACE,YAAY,kBAAkB,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIgzB,WAAWC,OAAOC,WAAW9yB,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAIgzB,WAAmB,SAAEzxB,WAAW,wBAAwBjB,YAAY,QAAQc,MAAM,CAAC,KAAO,WAAW,YAAc,YAAY2X,SAAS,CAAC,MAAS/Y,EAAIgzB,WAAmB,UAAGvxB,GAAG,CAAC,MAAQ,SAASC,GAAWA,EAAOsX,OAAOC,WAAqBjZ,EAAIkZ,KAAKlZ,EAAIgzB,WAAY,WAAYtxB,EAAOsX,OAAOja,WAAWqB,EAAG,IAAI,CAACE,YAAY,kBAAkB,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIgzB,WAAWC,OAAOE,eAAe/yB,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,SAAS,CAACE,YAAY,kBAAkB,CAACN,EAAIoC,GAAG,iBAAiBpC,EAAI+B,KAAK3B,EAAG,IAAI,CAACE,YAAY,kBAAkB,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIgzB,WAAWC,OAAOvmB,UAAUtM,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIoC,GAAG,0DAA0DhC,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIoC,GAAG,sJAAsJpC,EAAI+B,KAAK3B,EAAG,MAAM,CAACE,YAAY,qBAAqB,CAACF,EAAG,IAAI,CAACE,YAAY,WAAW,CAACF,EAAG,IAAI,CAACJ,EAAIoC,GAAG,qBAAqBpC,EAAIoC,GAAG,6CAA8CpC,EAAI+F,QAA0B,mBAAE3F,EAAG,IAAI,CAACJ,EAAIoC,GAAG,wBAAwBhC,EAAG,IAAI,CAACA,EAAG,OAAO,CAACJ,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI+F,QAAQqtB,oBAAoBpzB,EAAI+B,KAAM/B,EAAIqzB,sBAAsB32B,OAAS,EAAG0D,EAAG,IAAI,CAACE,YAAY,kBAAkB,CAACN,EAAIoC,GAAG,gGAAgGhC,EAAG,IAAI,CAACA,EAAG,OAAO,CAACJ,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,OAAPngB,CAAeA,EAAIqzB,+BAA+BrzB,EAAI+B,KAAK3B,EAAG,MAAM,CAACE,YAAY,4BAA4B,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,IAAI,CAACE,YAAY,SAAS0B,MAAM,CAAE,WAAYhC,EAAI+F,QAAQC,oBAAsBhG,EAAIqzB,sBAAsB32B,OAAS,GAAI0E,MAAM,CAAC,KAAOpB,EAAI+F,QAAQutB,YAAY,CAACtzB,EAAIoC,GAAG,kCAAkChC,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIoC,GAAG,iGAAiGhC,EAAG,OAAO,CAACJ,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAImgB,GAAG,OAAPngB,CAAeA,EAAIuzB,4BAA4BvzB,EAAIoC,GAAG,QAASpC,EAAI+F,QAA0B,mBAAE3F,EAAG,MAAM,CAACE,YAAY,4BAA4B,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,IAAI,CAACE,YAAY,mBAAmBmB,GAAG,CAAC,MAAQzB,EAAIwzB,iBAAiB,CAACxzB,EAAIoC,GAAG,gBAAgBpC,EAAI+B,SAAS/B,EAAI+B,QAAQ,GAAG3B,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,MAAM,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,eAAehC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAAGzZ,EAAI4I,OAAO6qB,QAA+HzzB,EAAI+B,KAA1H3B,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,IAAI,CAACJ,EAAIoC,GAAG,sDAAgEpC,EAAI4I,OAAc,QAAExI,EAAG,MAAM,CAACA,EAAG,IAAI,CAACE,YAAY,WAAW,CAACF,EAAG,IAAI,CAACJ,EAAIoC,GAAG,aAAapC,EAAIoC,GAAG,4EAA6EpC,EAAI4I,OAAyB,mBAAExI,EAAG,MAAM,CAACA,EAAG,IAAI,CAACE,YAAY,SAASmB,GAAG,CAAC,MAAQzB,EAAI0zB,eAAe,CAAC1zB,EAAIoC,GAAG,uBAAuBpC,EAAI+B,KAAO/B,EAAI4I,OAAO+qB,mBAAyhD3zB,EAAI+B,KAAzgD3B,EAAG,MAAM,CAACA,EAAG,OAAO,CAACqB,GAAG,CAAC,OAAS,SAASC,GAAgC,OAAxBA,EAAOY,iBAAwBtC,EAAI4zB,aAAav2B,MAAM,KAAMsb,cAAc,CAACvY,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAIuT,aAAiB,KAAEhS,WAAW,sBAAsBjB,YAAY,QAAQc,MAAM,CAAC,KAAO,OAAO,YAAc,YAAY2X,SAAS,CAAC,MAAS/Y,EAAIuT,aAAiB,MAAG9R,GAAG,CAAC,MAAQ,SAASC,GAAWA,EAAOsX,OAAOC,WAAqBjZ,EAAIkZ,KAAKlZ,EAAIuT,aAAc,OAAQ7R,EAAOsX,OAAOja,WAAWqB,EAAG,IAAI,CAACE,YAAY,kBAAkB,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIuT,aAAa0f,OAAOC,WAAW9yB,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAIuT,aAAqB,SAAEhS,WAAW,0BAA0BjB,YAAY,QAAQc,MAAM,CAAC,KAAO,WAAW,YAAc,YAAY2X,SAAS,CAAC,MAAS/Y,EAAIuT,aAAqB,UAAG9R,GAAG,CAAC,MAAQ,SAASC,GAAWA,EAAOsX,OAAOC,WAAqBjZ,EAAIkZ,KAAKlZ,EAAIuT,aAAc,WAAY7R,EAAOsX,OAAOja,WAAWqB,EAAG,IAAI,CAACE,YAAY,kBAAkB,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIuT,aAAa0f,OAAOE,eAAe/yB,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,SAAS,CAACE,YAAY,iBAAiBc,MAAM,CAAC,KAAO,WAAW,CAACpB,EAAIoC,GAAG,eAAehC,EAAG,IAAI,CAACE,YAAY,kBAAkB,CAACN,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAIuT,aAAa0f,OAAOvmB,UAAUtM,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACN,EAAIoC,GAAG,2HAAoIpC,EAAI+B,QAAQ,IAAI,IACl0M,GAAkB,GC8HtB,IACEzD,KAAM,6BACNiH,WAAY,CAAd,uCAEE,OACE,MAAO,CACLytB,WAAY,CAAlB,2DACMzf,aAAc,CAApB,6DAIE5O,SAAU,CACR,SACE,OAAO1E,KAAK8E,OAAOC,MAAM4D,QAG3B,UACE,OAAO3I,KAAK8E,OAAOC,MAAMe,SAG3B,yBACE,OAAI9F,KAAK8F,QAAQ8tB,sBACR5zB,KAAK8F,QAAQ8tB,sBAAsBhC,MAAM,KAE3C,IAGT,wBACE,OAAI5xB,KAAK8F,QAAQC,oBAAsB/F,KAAK8F,QAAQ+tB,sBAAwB7zB,KAAK8F,QAAQ8tB,sBAChF5zB,KAAK8F,QAAQ8tB,sBAAsBhC,MAAM,KAAK9gB,OAAOgjB,GAAS9zB,KAAK8F,QAAQ+tB,qBAAqBzoB,QAAQ0oB,GAAS,GAEnH,IAGT,iBACE,OAAO9zB,KAAK8E,OAAOC,MAAMW,OAAOquB,iBAIpC9uB,QAAS,CACP,mBACE+Q,EAAO7C,cAAcnT,KAAK+yB,YAAY5kB,KAAK3B,IACzCxM,KAAK+yB,WAAWE,KAAO,GACvBjzB,KAAK+yB,WAAWG,SAAW,GAC3BlzB,KAAK+yB,WAAWC,OAAOC,KAAO,GAC9BjzB,KAAK+yB,WAAWC,OAAOE,SAAW,GAClClzB,KAAK+yB,WAAWC,OAAOvmB,MAAQ,GAE1BD,EAASvQ,KAAK+3B,UACjBh0B,KAAK+yB,WAAWC,OAAOC,KAAOzmB,EAASvQ,KAAK+2B,OAAOC,KACnDjzB,KAAK+yB,WAAWC,OAAOE,SAAW1mB,EAASvQ,KAAK+2B,OAAOE,SACvDlzB,KAAK+yB,WAAWC,OAAOvmB,MAAQD,EAASvQ,KAAK+2B,OAAOvmB,UAK1D,iBACEuJ,EAAO3C,kBAGT,eACE2C,EAAO1C,aAAatT,KAAKsT,cAAcnF,KAAK3B,IAC1CxM,KAAKsT,aAAa2f,KAAO,GACzBjzB,KAAKsT,aAAa4f,SAAW,GAC7BlzB,KAAKsT,aAAa0f,OAAOC,KAAO,GAChCjzB,KAAKsT,aAAa0f,OAAOE,SAAW,GACpClzB,KAAKsT,aAAa0f,OAAOvmB,MAAQ,GAE5BD,EAASvQ,KAAK+3B,UACjBh0B,KAAKsT,aAAa0f,OAAOC,KAAOzmB,EAASvQ,KAAK+2B,OAAOC,KACrDjzB,KAAKsT,aAAa0f,OAAOE,SAAW1mB,EAASvQ,KAAK+2B,OAAOE,SACzDlzB,KAAKsT,aAAa0f,OAAOvmB,MAAQD,EAASvQ,KAAK+2B,OAAOvmB,UAK5D,eACEuJ,EAAOzC,kBAIXgc,QAAS,CACP,KAAJ,GACM,OAAOC,EAAMxG,KAAK,SClN4U,MCOhW,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBX,GAAS,WAAa,IAAIjpB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACA,EAAG,iBAAiBA,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,MAAM,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,sBAAsBhC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAAEzZ,EAAI6I,QAAc,OAAEzI,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,OAAO,CAACqB,GAAG,CAAC,OAAS,SAASC,GAAgC,OAAxBA,EAAOY,iBAAwBtC,EAAI0Y,gBAAgBrb,MAAM,KAAMsb,cAAc,CAACvY,EAAG,QAAQ,CAACE,YAAY,gCAAgC,CAACN,EAAIoC,GAAG,iCAAiChC,EAAG,IAAI,CAACJ,EAAIoC,GAAGpC,EAAImG,GAAGnG,EAAI6I,QAAQ+P,aAAaxY,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAI6Y,YAAe,IAAEtX,WAAW,oBAAoBjB,YAAY,QAAQc,MAAM,CAAC,KAAO,OAAO,YAAc,sBAAsB2X,SAAS,CAAC,MAAS/Y,EAAI6Y,YAAe,KAAGpX,GAAG,CAAC,MAAQ,SAASC,GAAWA,EAAOsX,OAAOC,WAAqBjZ,EAAIkZ,KAAKlZ,EAAI6Y,YAAa,MAAOnX,EAAOsX,OAAOja,aAAaqB,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,SAAS,CAACE,YAAY,iBAAiBc,MAAM,CAAC,KAAO,WAAW,CAACpB,EAAIoC,GAAG,kBAAkBpC,EAAI+B,KAAO/B,EAAI6I,QAAQ8U,OAA2F3d,EAAI+B,KAAvF3B,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,IAAI,CAACJ,EAAIoC,GAAG,qCAA8C,GAAGhC,EAAG,uBAAuB,CAACA,EAAG,WAAW,CAACqZ,KAAK,gBAAgB,CAACrZ,EAAG,MAAM,CAACE,YAAY,cAAc,CAACN,EAAIoC,GAAG,+CAA+ChC,EAAG,WAAW,CAACqZ,KAAK,WAAW,CAACrZ,EAAG,IAAI,CAACE,YAAY,WAAW,CAACN,EAAIoC,GAAG,mGAAmGpC,EAAI4G,GAAI5G,EAAW,SAAE,SAAS6G,GAAQ,OAAOzG,EAAG,MAAM,CAACf,IAAIwH,EAAOhG,IAAI,CAACT,EAAG,MAAM,CAACE,YAAY,SAAS,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,QAAQ,CAACE,YAAY,YAAY,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAO8H,EAAe,SAAEtF,WAAW,oBAAoBH,MAAM,CAAC,KAAO,YAAY2X,SAAS,CAAC,QAAUe,MAAMI,QAAQrT,EAAOgP,UAAU7V,EAAIoa,GAAGvT,EAAOgP,SAAS,OAAO,EAAGhP,EAAe,UAAGpF,GAAG,CAAC,OAAS,CAAC,SAASC,GAAQ,IAAI2Y,EAAIxT,EAAOgP,SAASyE,EAAK5Y,EAAOsX,OAAOuB,IAAID,EAAKE,QAAuB,GAAGV,MAAMI,QAAQG,GAAK,CAAC,IAAII,EAAI,KAAKC,EAAI1a,EAAIoa,GAAGC,EAAII,GAAQH,EAAKE,QAASE,EAAI,GAAI1a,EAAIkZ,KAAKrS,EAAQ,WAAYwT,EAAIM,OAAO,CAACF,KAAaC,GAAK,GAAI1a,EAAIkZ,KAAKrS,EAAQ,WAAYwT,EAAIva,MAAM,EAAE4a,GAAKC,OAAON,EAAIva,MAAM4a,EAAI,UAAY1a,EAAIkZ,KAAKrS,EAAQ,WAAY0T,IAAO,SAAS7Y,GAAQ,OAAO1B,EAAIqQ,cAAcxJ,EAAOhG,SAASb,EAAIoC,GAAG,IAAIpC,EAAImG,GAAGU,EAAOvI,MAAM,WAAYuI,EAAqB,eAAEzG,EAAG,OAAO,CAACE,YAAY,uBAAuBmB,GAAG,CAAC,OAAS,SAASC,GAAgC,OAAxBA,EAAOY,iBAAwBtC,EAAIk0B,qBAAqBrtB,EAAOhG,OAAO,CAACT,EAAG,MAAM,CAACE,YAAY,oBAAoB,CAACF,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,QAAQ,CAACiB,WAAW,CAAC,CAAC/C,KAAK,QAAQgD,QAAQ,UAAUvC,MAAOiB,EAAIm0B,iBAAoB,IAAE5yB,WAAW,yBAAyBjB,YAAY,QAAQc,MAAM,CAAC,KAAO,OAAO,YAAc,2BAA2B2X,SAAS,CAAC,MAAS/Y,EAAIm0B,iBAAoB,KAAG1yB,GAAG,CAAC,MAAQ,SAASC,GAAWA,EAAOsX,OAAOC,WAAqBjZ,EAAIkZ,KAAKlZ,EAAIm0B,iBAAkB,MAAOzyB,EAAOsX,OAAOja,aAAaqB,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,SAAS,CAACE,YAAY,iBAAiBc,MAAM,CAAC,KAAO,WAAW,CAACpB,EAAIoC,GAAG,kBAAkBpC,EAAI+B,WAAU,IAAI,IAAI,IACrtG,GAAkB,GCuEtB,IACEzD,KAAM,6BACNiH,WAAY,CAAd,uCAEE,OACE,MAAO,CACLsT,YAAa,CAAnB,QACMsb,iBAAkB,CAAxB,UAIExvB,SAAU,CACR,UACE,OAAO1E,KAAK8E,OAAOC,MAAM6D,SAG3B,UACE,OAAO5I,KAAK8E,OAAOC,MAAMkD,UAI7BhD,QAAS,CACP,kBACE+Q,EAAOxC,gBAAgBxT,KAAK4Y,cAG9B,cAAJ,GACM5C,EAAO5F,cAAcN,IAGvB,qBAAJ,GACMkG,EAAO7F,cAAcL,EAAU9P,KAAKk0B,oBAIxC3E,QAAS,IC3GyV,MCOhW,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QC0BfroB,OAAIC,IAAIgtB,SAED,MAAMC,GAAS,IAAID,QAAU,CAClCE,OAAQ,CACN,CACEzvB,KAAM,IACNvG,KAAM,YACNgH,UAAWivB,IAEb,CACE1vB,KAAM,SACNvG,KAAM,QACNgH,UAAWkvB,IAEb,CACE3vB,KAAM,eACNvG,KAAM,cACNgH,UAAWmvB,IAEb,CACE5vB,KAAM,SACN6vB,SAAU,iBAEZ,CACE7vB,KAAM,gBACNvG,KAAM,SACNgH,UAAWqvB,GACXnZ,KAAM,CAAEC,eAAe,EAAM+D,UAAU,IAEzC,CACE3a,KAAM,+BACNvG,KAAM,wBACNgH,UAAWsvB,GACXpZ,KAAM,CAAEC,eAAe,EAAM+D,UAAU,IAEzC,CACE3a,KAAM,gCACNvG,KAAM,yBACNgH,UAAWuvB,GACXrZ,KAAM,CAAEC,eAAe,EAAM+D,UAAU,IAEzC,CACE3a,KAAM,iBACNvG,KAAM,UACNgH,UAAWwvB,GACXtZ,KAAM,CAAEC,eAAe,EAAM+D,UAAU,EAAMuV,WAAW,IAE1D,CACElwB,KAAM,4BACNvG,KAAM,SACNgH,UAAW0vB,GACXxZ,KAAM,CAAEC,eAAe,EAAMsZ,WAAW,IAE1C,CACElwB,KAAM,mCACNvG,KAAM,SACNgH,UAAW2vB,GACXzZ,KAAM,CAAEC,eAAe,EAAMsZ,WAAW,IAE1C,CACElwB,KAAM,gBACNvG,KAAM,SACNgH,UAAW4vB,GACX1Z,KAAM,CAAEC,eAAe,EAAM+D,UAAU,EAAMuV,WAAW,IAE1D,CACElwB,KAAM,0BACNvG,KAAM,QACNgH,UAAW6vB,GACX3Z,KAAM,CAAEC,eAAe,IAEzB,CACE5W,KAAM,gBACNvG,KAAM,SACNgH,UAAW8vB,GACX5Z,KAAM,CAAEC,eAAe,EAAM+D,UAAU,EAAMuV,WAAW,IAE1D,CACElwB,KAAM,uBACNvG,KAAM,QACNgH,UAAW+vB,GACX7Z,KAAM,CAAEC,eAAe,EAAMsZ,WAAW,IAE1C,CACElwB,KAAM,8BACNvG,KAAM,cACNgH,UAAWgwB,GACX9Z,KAAM,CAAEC,eAAe,EAAMsZ,WAAW,IAE1C,CACElwB,KAAM,mBACNvG,KAAM,YACNgH,UAAWiwB,GACX/Z,KAAM,CAAEC,eAAe,EAAM+D,UAAU,EAAMuV,WAAW,IAE1D,CACElwB,KAAM,oCACNvG,KAAM,iBACNgH,UAAWkwB,GACXha,KAAM,CAAEC,eAAe,EAAM+D,UAAU,EAAMuV,WAAW,IAE1D,CACElwB,KAAM,oCACNvG,KAAM,iBACNgH,UAAWmwB,GACXja,KAAM,CAAEC,eAAe,EAAM+D,UAAU,EAAMuV,WAAW,IAE1D,CACElwB,KAAM,YACNvG,KAAM,WACNgH,UAAWowB,GACXla,KAAM,CAAEC,eAAe,IAEzB,CACE5W,KAAM,sBACNvG,KAAM,UACNgH,UAAWqwB,GACXna,KAAM,CAAEC,eAAe,IAEzB,CACE5W,KAAM,cACN6vB,SAAU,uBAEZ,CACE7vB,KAAM,sBACNvG,KAAM,oBACNgH,UAAWswB,GACXpa,KAAM,CAAEC,eAAe,EAAM+D,UAAU,EAAMuV,WAAW,IAE1D,CACElwB,KAAM,iCACNvG,KAAM,mBACNgH,UAAWuwB,GACXra,KAAM,CAAEC,eAAe,IAEzB,CACE5W,KAAM,qBACNvG,KAAM,mBACNgH,UAAWwwB,GACXta,KAAM,CAAEC,eAAe,EAAM+D,UAAU,EAAMuV,WAAW,IAE1D,CACElwB,KAAM,wBACNvG,KAAM,YACNgH,UAAWywB,GACXva,KAAM,CAAEC,eAAe,IAEzB,CACE5W,KAAM,SACNvG,KAAM,QACNgH,UAAW0wB,GACXxa,KAAM,CAAEC,eAAe,IAEzB,CACE5W,KAAM,SACNvG,KAAM,QACNgH,UAAW2wB,GACXza,KAAM,CAAEC,eAAe,IAEzB,CACE5W,KAAM,aACN6vB,SAAU,gBAEZ,CACE7vB,KAAM,0BACNvG,KAAM,YACNgH,UAAW4wB,GACX1a,KAAM,CAAEC,eAAe,IAEzB,CACE5W,KAAM,iCACNvG,KAAM,WACNgH,UAAW6wB,GACX3a,KAAM,CAAEC,eAAe,IAEzB,CACE5W,KAAM,UACN6vB,SAAU,mBAEZ,CACE7vB,KAAM,kBACNvG,KAAM,iBACNgH,UAAW8wB,IAEb,CACEvxB,KAAM,iBACNvG,KAAM,UACNgH,UAAW+wB,GACX7a,KAAM,CAAEC,eAAe,EAAM+D,UAAU,IAEzC,CACE3a,KAAM,8BACNvG,KAAM,8BACNgH,UAAWgxB,GACX9a,KAAM,CAAEC,eAAe,EAAM+D,UAAU,IAEzC,CACE3a,KAAM,oCACNvG,KAAM,oCACNgH,UAAWixB,GACX/a,KAAM,CAAEC,eAAe,EAAM+D,UAAU,IAEzC,CACE3a,KAAM,oCACNvG,KAAM,iBACNgH,UAAWkxB,GACXhb,KAAM,CAAEC,eAAe,IAEzB,CACE5W,KAAM,kCACNvG,KAAM,gBACNgH,UAAWmxB,GACXjb,KAAM,CAAEC,eAAe,IAEzB,CACE5W,KAAM,wCACNvG,KAAM,mBACNgH,UAAWoxB,GACXlb,KAAM,CAAEC,eAAe,IAEzB,CACE5W,KAAM,kBACNvG,KAAM,iBACNgH,UAAWqxB,IAEb,CACE9xB,KAAM,yBACNvG,KAAM,wBACNgH,UAAWsxB,IAEb,CACE/xB,KAAM,oBACNvG,KAAM,mBACNgH,UAAWuxB,IAEb,CACEhyB,KAAM,4BACNvG,KAAM,2BACNgH,UAAWwxB,IAEb,CACEjyB,KAAM,4BACNvG,KAAM,2BACNgH,UAAWyxB,KAGfC,eAAgBzyB,EAAI+W,EAAM2b,GAExB,OAAIA,EACK,IAAIhqB,QAAQ,CAAC9L,EAAS+L,KAC3BZ,WAAW,KACTnL,EAAQ81B,IACP,MAEI1yB,EAAGM,OAASyW,EAAKzW,MAAQN,EAAG2yB,KAC9B,CAAEC,SAAU5yB,EAAG2yB,KAAMjmB,OAAQ,CAAEmmB,EAAG,EAAGC,EAAG,MACtC9yB,EAAG2yB,KACL,IAAIjqB,QAAQ,CAAC9L,EAAS+L,KAC3BZ,WAAW,KACTnL,EAAQ,CAAEg2B,SAAU5yB,EAAG2yB,KAAMjmB,OAAQ,CAAEmmB,EAAG,EAAGC,EAAG,QAC/C,MAEI9yB,EAAGiX,KAAKuZ,UACV,IAAI9nB,QAAQ,CAAC9L,EAAS+L,KAC3BZ,WAAW,KACL/H,EAAGiX,KAAKgE,SACVre,EAAQ,CAAEg2B,SAAU,OAAQlmB,OAAQ,CAAEmmB,EAAG,EAAGC,EAAG,OAE/Cl2B,EAAQ,CAAEg2B,SAAU,OAAQlmB,OAAQ,CAAEmmB,EAAG,EAAGC,EAAG,QAEhD,MAGE,CAAED,EAAG,EAAGC,EAAG,MAKxBhD,GAAOhZ,WAAW,CAAC9W,EAAI+W,EAAMC,IACvBzO,EAAM9H,MAAMpD,kBACdkL,EAAM7H,OAAOyF,GAAwB,QACrC6Q,GAAK,IAGHzO,EAAM9H,MAAMnD,kBACdiL,EAAM7H,OAAOyF,GAAwB,QACrC6Q,GAAK,SAGPA,GAAK,I,4BCzUP+b,KAA0BC,MAC1BpwB,OAAI4J,OAAO,YAAY,SAAUhS,EAAOy4B,GACtC,OAAIA,EACKD,KAAOE,SAAS14B,GAAOy4B,OAAOA,GAEhCD,KAAOE,SAAS14B,GAAOy4B,OAAO,gBAGvCrwB,OAAI4J,OAAO,QAAQ,SAAUhS,EAAOy4B,GAClC,OAAIA,EACKD,KAAOx4B,GAAOy4B,OAAOA,GAEvBD,KAAOx4B,GAAOy4B,YAGvBrwB,OAAI4J,OAAO,eAAe,SAAUhS,EAAO24B,GACzC,OAAOH,KAAOx4B,GAAO44B,QAAQD,MAG/BvwB,OAAI4J,OAAO,UAAU,SAAUhS,GAC7B,OAAOA,EAAMwuB,oBAGfpmB,OAAI4J,OAAO,YAAY,SAAUhS,GAC/B,OAAc,IAAVA,EACK,OAEK,IAAVA,EACK,SAEJA,EAGEA,EAAQ,YAFN,M,4BChCXoI,OAAIC,IAAIwwB,KAAgB,CACtBC,MAAO,qBACPC,YAAa,MACb9V,OAAQ,Q,uHCUV7a,OAAIxB,OAAOoyB,eAAgB,EAE3B5wB,OAAIC,IAAI4wB,MACR7wB,OAAIC,IAAI6wB,MACR9wB,OAAIC,IAAI8wB,SACR/wB,OAAIC,IAAI+wB,MAGR,IAAIhxB,OAAI,CACNixB,GAAI,OACJ/D,UACAvnB,QACAvH,WAAY,CAAE8yB,QACdtd,SAAU,Y,yDC7BZ,W,uDCAA,wCAOIzV,EAAY,eACd,aACA,OACA,QACA,EACA,KACA,KACA,MAIa,aAAAA,E","file":"player/js/app.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('section',{staticClass:\"hero is-light is-bold fd-content\"},[_c('div',{staticClass:\"hero-body\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('div',{staticClass:\"columns\",staticStyle:{\"flex-direction\":\"row-reverse\"}},[_c('div',{staticClass:\"column fd-has-cover\"},[_vm._t(\"heading-right\")],2),_c('div',{staticClass:\"column is-three-fifths has-text-centered-mobile\",staticStyle:{\"margin\":\"auto 0\"}},[_vm._t(\"heading-left\")],2)])])])])])]),_c('section',{staticClass:\"section fd-content\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_vm._t(\"content\"),_c('div',{staticStyle:{\"margin-top\":\"16px\"}},[_vm._t(\"footer\")],2)],2)])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentWithHero.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentWithHero.vue?vue&type=script&lang=js&\"","var map = {\n\t\"./af\": \"2bfb\",\n\t\"./af.js\": \"2bfb\",\n\t\"./ar\": \"8e73\",\n\t\"./ar-dz\": \"a356\",\n\t\"./ar-dz.js\": \"a356\",\n\t\"./ar-kw\": \"423e\",\n\t\"./ar-kw.js\": \"423e\",\n\t\"./ar-ly\": \"1cfd\",\n\t\"./ar-ly.js\": \"1cfd\",\n\t\"./ar-ma\": \"0a84\",\n\t\"./ar-ma.js\": \"0a84\",\n\t\"./ar-sa\": \"8230\",\n\t\"./ar-sa.js\": \"8230\",\n\t\"./ar-tn\": \"6d83\",\n\t\"./ar-tn.js\": \"6d83\",\n\t\"./ar.js\": \"8e73\",\n\t\"./az\": \"485c\",\n\t\"./az.js\": \"485c\",\n\t\"./be\": \"1fc1\",\n\t\"./be.js\": \"1fc1\",\n\t\"./bg\": \"84aa\",\n\t\"./bg.js\": \"84aa\",\n\t\"./bm\": \"a7fa\",\n\t\"./bm.js\": \"a7fa\",\n\t\"./bn\": \"9043\",\n\t\"./bn-bd\": \"9686\",\n\t\"./bn-bd.js\": \"9686\",\n\t\"./bn.js\": \"9043\",\n\t\"./bo\": \"d26a\",\n\t\"./bo.js\": \"d26a\",\n\t\"./br\": \"6887\",\n\t\"./br.js\": \"6887\",\n\t\"./bs\": \"2554\",\n\t\"./bs.js\": \"2554\",\n\t\"./ca\": \"d716\",\n\t\"./ca.js\": \"d716\",\n\t\"./cs\": \"3c0d\",\n\t\"./cs.js\": \"3c0d\",\n\t\"./cv\": \"03ec\",\n\t\"./cv.js\": \"03ec\",\n\t\"./cy\": \"9797\",\n\t\"./cy.js\": \"9797\",\n\t\"./da\": \"0f14\",\n\t\"./da.js\": \"0f14\",\n\t\"./de\": \"b469\",\n\t\"./de-at\": \"b3eb\",\n\t\"./de-at.js\": \"b3eb\",\n\t\"./de-ch\": \"bb71\",\n\t\"./de-ch.js\": \"bb71\",\n\t\"./de.js\": \"b469\",\n\t\"./dv\": \"598a\",\n\t\"./dv.js\": \"598a\",\n\t\"./el\": \"8d47\",\n\t\"./el.js\": \"8d47\",\n\t\"./en-au\": \"0e6b\",\n\t\"./en-au.js\": \"0e6b\",\n\t\"./en-ca\": \"3886\",\n\t\"./en-ca.js\": \"3886\",\n\t\"./en-gb\": \"39a6\",\n\t\"./en-gb.js\": \"39a6\",\n\t\"./en-ie\": \"e1d3\",\n\t\"./en-ie.js\": \"e1d3\",\n\t\"./en-il\": \"7333\",\n\t\"./en-il.js\": \"7333\",\n\t\"./en-in\": \"ec2e\",\n\t\"./en-in.js\": \"ec2e\",\n\t\"./en-nz\": \"6f50\",\n\t\"./en-nz.js\": \"6f50\",\n\t\"./en-sg\": \"b7e9\",\n\t\"./en-sg.js\": \"b7e9\",\n\t\"./eo\": \"65db\",\n\t\"./eo.js\": \"65db\",\n\t\"./es\": \"898b\",\n\t\"./es-do\": \"0a3c\",\n\t\"./es-do.js\": \"0a3c\",\n\t\"./es-mx\": \"b5b7\",\n\t\"./es-mx.js\": \"b5b7\",\n\t\"./es-us\": \"55c9\",\n\t\"./es-us.js\": \"55c9\",\n\t\"./es.js\": \"898b\",\n\t\"./et\": \"ec18\",\n\t\"./et.js\": \"ec18\",\n\t\"./eu\": \"0ff2\",\n\t\"./eu.js\": \"0ff2\",\n\t\"./fa\": \"8df4\",\n\t\"./fa.js\": \"8df4\",\n\t\"./fi\": \"81e9\",\n\t\"./fi.js\": \"81e9\",\n\t\"./fil\": \"d69a\",\n\t\"./fil.js\": \"d69a\",\n\t\"./fo\": \"0721\",\n\t\"./fo.js\": \"0721\",\n\t\"./fr\": \"9f26\",\n\t\"./fr-ca\": \"d9f8\",\n\t\"./fr-ca.js\": \"d9f8\",\n\t\"./fr-ch\": \"0e49\",\n\t\"./fr-ch.js\": \"0e49\",\n\t\"./fr.js\": \"9f26\",\n\t\"./fy\": \"7118\",\n\t\"./fy.js\": \"7118\",\n\t\"./ga\": \"5120\",\n\t\"./ga.js\": \"5120\",\n\t\"./gd\": \"f6b4\",\n\t\"./gd.js\": \"f6b4\",\n\t\"./gl\": \"8840\",\n\t\"./gl.js\": \"8840\",\n\t\"./gom-deva\": \"aaf2\",\n\t\"./gom-deva.js\": \"aaf2\",\n\t\"./gom-latn\": \"0caa\",\n\t\"./gom-latn.js\": \"0caa\",\n\t\"./gu\": \"e0c5\",\n\t\"./gu.js\": \"e0c5\",\n\t\"./he\": \"c7aa\",\n\t\"./he.js\": \"c7aa\",\n\t\"./hi\": \"dc4d\",\n\t\"./hi.js\": \"dc4d\",\n\t\"./hr\": \"4ba9\",\n\t\"./hr.js\": \"4ba9\",\n\t\"./hu\": \"5b14\",\n\t\"./hu.js\": \"5b14\",\n\t\"./hy-am\": \"d6b6\",\n\t\"./hy-am.js\": \"d6b6\",\n\t\"./id\": \"5038\",\n\t\"./id.js\": \"5038\",\n\t\"./is\": \"0558\",\n\t\"./is.js\": \"0558\",\n\t\"./it\": \"6e98\",\n\t\"./it-ch\": \"6f12\",\n\t\"./it-ch.js\": \"6f12\",\n\t\"./it.js\": \"6e98\",\n\t\"./ja\": \"079e\",\n\t\"./ja.js\": \"079e\",\n\t\"./jv\": \"b540\",\n\t\"./jv.js\": \"b540\",\n\t\"./ka\": \"201b\",\n\t\"./ka.js\": \"201b\",\n\t\"./kk\": \"6d79\",\n\t\"./kk.js\": \"6d79\",\n\t\"./km\": \"e81d\",\n\t\"./km.js\": \"e81d\",\n\t\"./kn\": \"3e92\",\n\t\"./kn.js\": \"3e92\",\n\t\"./ko\": \"22f8\",\n\t\"./ko.js\": \"22f8\",\n\t\"./ku\": \"2421\",\n\t\"./ku.js\": \"2421\",\n\t\"./ky\": \"9609\",\n\t\"./ky.js\": \"9609\",\n\t\"./lb\": \"440c\",\n\t\"./lb.js\": \"440c\",\n\t\"./lo\": \"b29d\",\n\t\"./lo.js\": \"b29d\",\n\t\"./lt\": \"26f9\",\n\t\"./lt.js\": \"26f9\",\n\t\"./lv\": \"b97c\",\n\t\"./lv.js\": \"b97c\",\n\t\"./me\": \"293c\",\n\t\"./me.js\": \"293c\",\n\t\"./mi\": \"688b\",\n\t\"./mi.js\": \"688b\",\n\t\"./mk\": \"6909\",\n\t\"./mk.js\": \"6909\",\n\t\"./ml\": \"02fb\",\n\t\"./ml.js\": \"02fb\",\n\t\"./mn\": \"958b\",\n\t\"./mn.js\": \"958b\",\n\t\"./mr\": \"39bd\",\n\t\"./mr.js\": \"39bd\",\n\t\"./ms\": \"ebe4\",\n\t\"./ms-my\": \"6403\",\n\t\"./ms-my.js\": \"6403\",\n\t\"./ms.js\": \"ebe4\",\n\t\"./mt\": \"1b45\",\n\t\"./mt.js\": \"1b45\",\n\t\"./my\": \"8689\",\n\t\"./my.js\": \"8689\",\n\t\"./nb\": \"6ce3\",\n\t\"./nb.js\": \"6ce3\",\n\t\"./ne\": \"3a39\",\n\t\"./ne.js\": \"3a39\",\n\t\"./nl\": \"facd\",\n\t\"./nl-be\": \"db29\",\n\t\"./nl-be.js\": \"db29\",\n\t\"./nl.js\": \"facd\",\n\t\"./nn\": \"b84c\",\n\t\"./nn.js\": \"b84c\",\n\t\"./oc-lnc\": \"167b\",\n\t\"./oc-lnc.js\": \"167b\",\n\t\"./pa-in\": \"f3ff\",\n\t\"./pa-in.js\": \"f3ff\",\n\t\"./pl\": \"8d57\",\n\t\"./pl.js\": \"8d57\",\n\t\"./pt\": \"f260\",\n\t\"./pt-br\": \"d2d4\",\n\t\"./pt-br.js\": \"d2d4\",\n\t\"./pt.js\": \"f260\",\n\t\"./ro\": \"972c\",\n\t\"./ro.js\": \"972c\",\n\t\"./ru\": \"957c\",\n\t\"./ru.js\": \"957c\",\n\t\"./sd\": \"6784\",\n\t\"./sd.js\": \"6784\",\n\t\"./se\": \"ffff\",\n\t\"./se.js\": \"ffff\",\n\t\"./si\": \"eda5\",\n\t\"./si.js\": \"eda5\",\n\t\"./sk\": \"7be6\",\n\t\"./sk.js\": \"7be6\",\n\t\"./sl\": \"8155\",\n\t\"./sl.js\": \"8155\",\n\t\"./sq\": \"c8f3\",\n\t\"./sq.js\": \"c8f3\",\n\t\"./sr\": \"cf1e\",\n\t\"./sr-cyrl\": \"13e9\",\n\t\"./sr-cyrl.js\": \"13e9\",\n\t\"./sr.js\": \"cf1e\",\n\t\"./ss\": \"52bd\",\n\t\"./ss.js\": \"52bd\",\n\t\"./sv\": \"5fbd\",\n\t\"./sv.js\": \"5fbd\",\n\t\"./sw\": \"74dc\",\n\t\"./sw.js\": \"74dc\",\n\t\"./ta\": \"3de5\",\n\t\"./ta.js\": \"3de5\",\n\t\"./te\": \"5cbb\",\n\t\"./te.js\": \"5cbb\",\n\t\"./tet\": \"576c\",\n\t\"./tet.js\": \"576c\",\n\t\"./tg\": \"3b1b\",\n\t\"./tg.js\": \"3b1b\",\n\t\"./th\": \"10e8\",\n\t\"./th.js\": \"10e8\",\n\t\"./tk\": \"5aff\",\n\t\"./tk.js\": \"5aff\",\n\t\"./tl-ph\": \"0f38\",\n\t\"./tl-ph.js\": \"0f38\",\n\t\"./tlh\": \"cf75\",\n\t\"./tlh.js\": \"cf75\",\n\t\"./tr\": \"0e81\",\n\t\"./tr.js\": \"0e81\",\n\t\"./tzl\": \"cf51\",\n\t\"./tzl.js\": \"cf51\",\n\t\"./tzm\": \"c109\",\n\t\"./tzm-latn\": \"b53d\",\n\t\"./tzm-latn.js\": \"b53d\",\n\t\"./tzm.js\": \"c109\",\n\t\"./ug-cn\": \"6117\",\n\t\"./ug-cn.js\": \"6117\",\n\t\"./uk\": \"ada2\",\n\t\"./uk.js\": \"ada2\",\n\t\"./ur\": \"5294\",\n\t\"./ur.js\": \"5294\",\n\t\"./uz\": \"2e8c\",\n\t\"./uz-latn\": \"010e\",\n\t\"./uz-latn.js\": \"010e\",\n\t\"./uz.js\": \"2e8c\",\n\t\"./vi\": \"2921\",\n\t\"./vi.js\": \"2921\",\n\t\"./x-pseudo\": \"fd7e\",\n\t\"./x-pseudo.js\": \"fd7e\",\n\t\"./yo\": \"7f33\",\n\t\"./yo.js\": \"7f33\",\n\t\"./zh-cn\": \"5c3a\",\n\t\"./zh-cn.js\": \"5c3a\",\n\t\"./zh-hk\": \"49ab\",\n\t\"./zh-hk.js\": \"49ab\",\n\t\"./zh-mo\": \"3a6c\",\n\t\"./zh-mo.js\": \"3a6c\",\n\t\"./zh-tw\": \"90ea\",\n\t\"./zh-tw.js\": \"90ea\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"4678\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('navbar-top'),_c('vue-progress-bar',{staticClass:\"fd-progress-bar\"}),_c('transition',{attrs:{\"name\":\"fade\"}},[_c('router-view',{directives:[{name:\"show\",rawName:\"v-show\",value:(true),expression:\"true\"}]})],1),_c('modal-dialog-remote-pairing',{attrs:{\"show\":_vm.pairing_active},on:{\"close\":function($event){_vm.pairing_active = false}}}),_c('modal-dialog-update',{attrs:{\"show\":_vm.show_update_dialog},on:{\"close\":function($event){_vm.show_update_dialog = false}}}),_c('notifications',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.show_burger_menu),expression:\"!show_burger_menu\"}]}),_c('navbar-bottom'),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.show_burger_menu || _vm.show_player_menu),expression:\"show_burger_menu || show_player_menu\"}],staticClass:\"fd-overlay-fullscreen\",on:{\"click\":function($event){_vm.show_burger_menu = _vm.show_player_menu = false}}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('nav',{staticClass:\"fd-top-navbar navbar is-light is-fixed-top\",style:(_vm.zindex),attrs:{\"role\":\"navigation\",\"aria-label\":\"main navigation\"}},[_c('div',{staticClass:\"navbar-brand\"},[(_vm.is_visible_playlists)?_c('navbar-item-link',{attrs:{\"to\":\"/playlists\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-library-music\"})])]):_vm._e(),(_vm.is_visible_music)?_c('navbar-item-link',{attrs:{\"to\":\"/music\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-music\"})])]):_vm._e(),(_vm.is_visible_podcasts)?_c('navbar-item-link',{attrs:{\"to\":\"/podcasts\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-microphone\"})])]):_vm._e(),(_vm.is_visible_audiobooks)?_c('navbar-item-link',{attrs:{\"to\":\"/audiobooks\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-book-open-variant\"})])]):_vm._e(),(_vm.is_visible_radio)?_c('navbar-item-link',{attrs:{\"to\":\"/radio\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-radio\"})])]):_vm._e(),(_vm.is_visible_files)?_c('navbar-item-link',{attrs:{\"to\":\"/files\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-folder-open\"})])]):_vm._e(),(_vm.is_visible_search)?_c('navbar-item-link',{attrs:{\"to\":\"/search\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-magnify\"})])]):_vm._e(),_c('div',{staticClass:\"navbar-burger\",class:{ 'is-active': _vm.show_burger_menu },on:{\"click\":function($event){_vm.show_burger_menu = !_vm.show_burger_menu}}},[_c('span'),_c('span'),_c('span')])],1),_c('div',{staticClass:\"navbar-menu\",class:{ 'is-active': _vm.show_burger_menu }},[_c('div',{staticClass:\"navbar-start\"}),_c('div',{staticClass:\"navbar-end\"},[_c('div',{staticClass:\"navbar-item has-dropdown is-hoverable\",class:{ 'is-active': _vm.show_settings_menu },on:{\"click\":_vm.on_click_outside_settings}},[_vm._m(0),_c('div',{staticClass:\"navbar-dropdown is-right\"},[_c('navbar-item-link',{attrs:{\"to\":\"/playlists\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-library-music\"})]),_vm._v(\" \"),_c('b',[_vm._v(\"Playlists\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/music\",\"exact\":\"\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-music\"})]),_vm._v(\" \"),_c('b',[_vm._v(\"Music\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/music/artists\"}},[_c('span',{staticClass:\"fd-navbar-item-level2\"},[_vm._v(\"Artists\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/music/albums\"}},[_c('span',{staticClass:\"fd-navbar-item-level2\"},[_vm._v(\"Albums\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/music/genres\"}},[_c('span',{staticClass:\"fd-navbar-item-level2\"},[_vm._v(\"Genres\")])]),(_vm.spotify_enabled)?_c('navbar-item-link',{attrs:{\"to\":\"/music/spotify\"}},[_c('span',{staticClass:\"fd-navbar-item-level2\"},[_vm._v(\"Spotify\")])]):_vm._e(),_c('navbar-item-link',{attrs:{\"to\":\"/podcasts\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-microphone\"})]),_vm._v(\" \"),_c('b',[_vm._v(\"Podcasts\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/audiobooks\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-book-open-variant\"})]),_vm._v(\" \"),_c('b',[_vm._v(\"Audiobooks\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/radio\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-radio\"})]),_vm._v(\" \"),_c('b',[_vm._v(\"Radio\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/files\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-folder-open\"})]),_vm._v(\" \"),_c('b',[_vm._v(\"Files\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/search\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-magnify\"})]),_vm._v(\" \"),_c('b',[_vm._v(\"Search\")])]),_c('hr',{staticClass:\"fd-navbar-divider\"}),_c('navbar-item-link',{attrs:{\"to\":\"/settings/webinterface\"}},[_vm._v(\"Settings\")]),_c('a',{staticClass:\"navbar-item\",on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();_vm.show_update_dialog = true; _vm.show_settings_menu = false; _vm.show_burger_menu = false}}},[_vm._v(\" Update Library \")]),_c('navbar-item-link',{attrs:{\"to\":\"/about\"}},[_vm._v(\"About\")]),_c('div',{staticClass:\"navbar-item is-hidden-desktop\",staticStyle:{\"margin-bottom\":\"2.5rem\"}})],1)])])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.show_settings_menu),expression:\"show_settings_menu\"}],staticClass:\"is-overlay\",staticStyle:{\"z-index\":\"10\",\"width\":\"100vw\",\"height\":\"100vh\"},on:{\"click\":function($event){_vm.show_settings_menu = false}}})])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{staticClass:\"navbar-link is-arrowless\"},[_c('span',{staticClass:\"icon is-hidden-touch\"},[_c('i',{staticClass:\"mdi mdi-24px mdi-menu\"})]),_c('span',{staticClass:\"is-hidden-desktop has-text-weight-bold\"},[_vm._v(\"OwnTone\")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{staticClass:\"navbar-item\",class:{ 'is-active': _vm.is_active },attrs:{\"href\":_vm.full_path()},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.open_link()}}},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export const UPDATE_CONFIG = 'UPDATE_CONFIG'\nexport const UPDATE_SETTINGS = 'UPDATE_SETTINGS'\nexport const UPDATE_SETTINGS_OPTION = 'UPDATE_SETTINGS_OPTION'\nexport const UPDATE_LIBRARY_STATS = 'UPDATE_LIBRARY_STATS'\nexport const UPDATE_LIBRARY_AUDIOBOOKS_COUNT = 'UPDATE_LIBRARY_AUDIOBOOKS_COUNT'\nexport const UPDATE_LIBRARY_PODCASTS_COUNT = 'UPDATE_LIBRARY_PODCASTS_COUNT'\nexport const UPDATE_LIBRARY_RSS_COUNT = 'UPDATE_LIBRARY_RSS_COUNT'\nexport const UPDATE_OUTPUTS = 'UPDATE_OUTPUTS'\nexport const UPDATE_PLAYER_STATUS = 'UPDATE_PLAYER_STATUS'\nexport const UPDATE_QUEUE = 'UPDATE_QUEUE'\nexport const UPDATE_LASTFM = 'UPDATE_LASTFM'\nexport const UPDATE_SPOTIFY = 'UPDATE_SPOTIFY'\nexport const UPDATE_PAIRING = 'UPDATE_PAIRING'\n\nexport const SPOTIFY_NEW_RELEASES = 'SPOTIFY_NEW_RELEASES'\nexport const SPOTIFY_FEATURED_PLAYLISTS = 'SPOTIFY_FEATURED_PLAYLISTS'\n\nexport const ADD_NOTIFICATION = 'ADD_NOTIFICATION'\nexport const DELETE_NOTIFICATION = 'DELETE_NOTIFICATION'\nexport const ADD_RECENT_SEARCH = 'ADD_RECENT_SEARCH'\n\nexport const HIDE_SINGLES = 'HIDE_SINGLES'\nexport const HIDE_SPOTIFY = 'HIDE_SPOTIFY'\nexport const ARTISTS_SORT = 'ARTISTS_SORT'\nexport const ARTIST_ALBUMS_SORT = 'ARTIST_ALBUMS_SORT'\nexport const ALBUMS_SORT = 'ALBUMS_SORT'\nexport const SHOW_ONLY_NEXT_ITEMS = 'SHOW_ONLY_NEXT_ITEMS'\nexport const SHOW_BURGER_MENU = 'SHOW_BURGER_MENU'\nexport const SHOW_PLAYER_MENU = 'SHOW_PLAYER_MENU'\nexport const SHOW_UPDATE_DIALOG = 'SHOW_UPDATE_DIALOG'\nexport const UPDATE_DIALOG_SCAN_KIND = 'UPDATE_DIALOG_SCAN_KIND'\n","<template>\n <a class=\"navbar-item\" :class=\"{ 'is-active': is_active }\" @click.stop.prevent=\"open_link()\" :href=\"full_path()\">\n <slot></slot>\n </a>\n</template>\n\n<script>\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'NavbarItemLink',\n props: {\n to: String,\n exact: Boolean\n },\n\n computed: {\n is_active () {\n if (this.exact) {\n return this.$route.path === this.to\n }\n return this.$route.path.startsWith(this.to)\n },\n\n show_player_menu: {\n get () {\n return this.$store.state.show_player_menu\n },\n set (value) {\n this.$store.commit(types.SHOW_PLAYER_MENU, value)\n }\n },\n\n show_burger_menu: {\n get () {\n return this.$store.state.show_burger_menu\n },\n set (value) {\n this.$store.commit(types.SHOW_BURGER_MENU, value)\n }\n }\n },\n\n methods: {\n open_link: function () {\n if (this.show_burger_menu) {\n this.$store.commit(types.SHOW_BURGER_MENU, false)\n }\n if (this.show_player_menu) {\n this.$store.commit(types.SHOW_PLAYER_MENU, false)\n }\n this.$router.push({ path: this.to })\n },\n\n full_path: function () {\n const resolved = this.$router.resolve(this.to)\n return resolved.href\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarItemLink.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarItemLink.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavbarItemLink.vue?vue&type=template&id=69134921&\"\nimport script from \"./NavbarItemLink.vue?vue&type=script&lang=js&\"\nexport * from \"./NavbarItemLink.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <nav class=\"fd-top-navbar navbar is-light is-fixed-top\" :style=\"zindex\" role=\"navigation\" aria-label=\"main navigation\">\n <div class=\"navbar-brand\">\n <navbar-item-link to=\"/playlists\" v-if=\"is_visible_playlists\">\n <span class=\"icon\"><i class=\"mdi mdi-library-music\"></i></span>\n </navbar-item-link>\n <navbar-item-link to=\"/music\" v-if=\"is_visible_music\">\n <span class=\"icon\"><i class=\"mdi mdi-music\"></i></span>\n </navbar-item-link>\n <navbar-item-link to=\"/podcasts\" v-if=\"is_visible_podcasts\">\n <span class=\"icon\"><i class=\"mdi mdi-microphone\"></i></span>\n </navbar-item-link>\n <navbar-item-link to=\"/audiobooks\" v-if=\"is_visible_audiobooks\">\n <span class=\"icon\"><i class=\"mdi mdi-book-open-variant\"></i></span>\n </navbar-item-link>\n <navbar-item-link to=\"/radio\" v-if=\"is_visible_radio\">\n <span class=\"icon\"><i class=\"mdi mdi-radio\"></i></span>\n </navbar-item-link>\n <navbar-item-link to=\"/files\" v-if=\"is_visible_files\">\n <span class=\"icon\"><i class=\"mdi mdi-folder-open\"></i></span>\n </navbar-item-link>\n <navbar-item-link to=\"/search\" v-if=\"is_visible_search\">\n <span class=\"icon\"><i class=\"mdi mdi-magnify\"></i></span>\n </navbar-item-link>\n\n <div class=\"navbar-burger\" @click=\"show_burger_menu = !show_burger_menu\" :class=\"{ 'is-active': show_burger_menu }\">\n <span></span>\n <span></span>\n <span></span>\n </div>\n </div>\n\n <div class=\"navbar-menu\" :class=\"{ 'is-active': show_burger_menu }\">\n <div class=\"navbar-start\">\n </div>\n\n <div class=\"navbar-end\">\n\n <!-- Burger menu entries -->\n <div class=\"navbar-item has-dropdown is-hoverable\"\n :class=\"{ 'is-active': show_settings_menu }\"\n @click=\"on_click_outside_settings\">\n <a class=\"navbar-link is-arrowless\">\n <span class=\"icon is-hidden-touch\"><i class=\"mdi mdi-24px mdi-menu\"></i></span>\n <span class=\"is-hidden-desktop has-text-weight-bold\">OwnTone</span>\n </a>\n\n <div class=\"navbar-dropdown is-right\">\n\n <navbar-item-link to=\"/playlists\"><span class=\"icon\"><i class=\"mdi mdi-library-music\"></i></span> <b>Playlists</b></navbar-item-link>\n <navbar-item-link to=\"/music\" exact><span class=\"icon\"><i class=\"mdi mdi-music\"></i></span> <b>Music</b></navbar-item-link>\n <navbar-item-link to=\"/music/artists\"><span class=\"fd-navbar-item-level2\">Artists</span></navbar-item-link>\n <navbar-item-link to=\"/music/albums\"><span class=\"fd-navbar-item-level2\">Albums</span></navbar-item-link>\n <navbar-item-link to=\"/music/genres\"><span class=\"fd-navbar-item-level2\">Genres</span></navbar-item-link>\n <navbar-item-link to=\"/music/spotify\" v-if=\"spotify_enabled\"><span class=\"fd-navbar-item-level2\">Spotify</span></navbar-item-link>\n <navbar-item-link to=\"/podcasts\"><span class=\"icon\"><i class=\"mdi mdi-microphone\"></i></span> <b>Podcasts</b></navbar-item-link>\n <navbar-item-link to=\"/audiobooks\"><span class=\"icon\"><i class=\"mdi mdi-book-open-variant\"></i></span> <b>Audiobooks</b></navbar-item-link>\n <navbar-item-link to=\"/radio\"><span class=\"icon\"><i class=\"mdi mdi-radio\"></i></span> <b>Radio</b></navbar-item-link>\n <navbar-item-link to=\"/files\"><span class=\"icon\"><i class=\"mdi mdi-folder-open\"></i></span> <b>Files</b></navbar-item-link>\n <navbar-item-link to=\"/search\"><span class=\"icon\"><i class=\"mdi mdi-magnify\"></i></span> <b>Search</b></navbar-item-link>\n <hr class=\"fd-navbar-divider\">\n\n <navbar-item-link to=\"/settings/webinterface\">Settings</navbar-item-link>\n <a class=\"navbar-item\" @click.stop.prevent=\"show_update_dialog = true; show_settings_menu = false; show_burger_menu = false\">\n Update Library\n </a>\n <navbar-item-link to=\"/about\">About</navbar-item-link>\n\n <div class=\"navbar-item is-hidden-desktop\" style=\"margin-bottom: 2.5rem;\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"is-overlay\" v-show=\"show_settings_menu\"\n style=\"z-index:10; width: 100vw; height:100vh;\"\n @click=\"show_settings_menu = false\"></div>\n </nav>\n</template>\n\n<script>\nimport NavbarItemLink from './NavbarItemLink'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'NavbarTop',\n components: { NavbarItemLink },\n\n data () {\n return {\n show_settings_menu: false\n }\n },\n\n computed: {\n is_visible_playlists () {\n return this.$store.getters.settings_option('webinterface', 'show_menu_item_playlists').value\n },\n is_visible_music () {\n return this.$store.getters.settings_option('webinterface', 'show_menu_item_music').value\n },\n is_visible_podcasts () {\n return this.$store.getters.settings_option('webinterface', 'show_menu_item_podcasts').value\n },\n is_visible_audiobooks () {\n return this.$store.getters.settings_option('webinterface', 'show_menu_item_audiobooks').value\n },\n is_visible_radio () {\n return this.$store.getters.settings_option('webinterface', 'show_menu_item_radio').value\n },\n is_visible_files () {\n return this.$store.getters.settings_option('webinterface', 'show_menu_item_files').value\n },\n is_visible_search () {\n return this.$store.getters.settings_option('webinterface', 'show_menu_item_search').value\n },\n\n player () {\n return this.$store.state.player\n },\n\n config () {\n return this.$store.state.config\n },\n\n library () {\n return this.$store.state.library\n },\n\n audiobooks () {\n return this.$store.state.audiobooks_count\n },\n\n podcasts () {\n return this.$store.state.podcasts_count\n },\n\n spotify_enabled () {\n return this.$store.state.spotify.webapi_token_valid\n },\n\n show_burger_menu: {\n get () {\n return this.$store.state.show_burger_menu\n },\n set (value) {\n this.$store.commit(types.SHOW_BURGER_MENU, value)\n }\n },\n\n show_player_menu () {\n return this.$store.state.show_player_menu\n },\n\n show_update_dialog: {\n get () {\n return this.$store.state.show_update_dialog\n },\n set (value) {\n this.$store.commit(types.SHOW_UPDATE_DIALOG, value)\n }\n },\n\n zindex () {\n if (this.show_player_menu) {\n return 'z-index: 20'\n }\n return ''\n }\n },\n\n methods: {\n on_click_outside_settings () {\n this.show_settings_menu = !this.show_settings_menu\n }\n },\n\n watch: {\n $route (to, from) {\n this.show_settings_menu = false\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarTop.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarTop.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavbarTop.vue?vue&type=template&id=269acb00&\"\nimport script from \"./NavbarTop.vue?vue&type=script&lang=js&\"\nexport * from \"./NavbarTop.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('nav',{staticClass:\"fd-bottom-navbar navbar is-white is-fixed-bottom\",class:{ 'is-transparent': _vm.is_now_playing_page, 'is-dark': !_vm.is_now_playing_page },style:(_vm.zindex),attrs:{\"role\":\"navigation\",\"aria-label\":\"player controls\"}},[_c('div',{staticClass:\"navbar-brand fd-expanded\"},[_c('navbar-item-link',{attrs:{\"to\":\"/\",\"exact\":\"\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-24px mdi-playlist-play\"})])]),(!_vm.is_now_playing_page)?_c('router-link',{staticClass:\"navbar-item is-expanded is-clipped\",attrs:{\"to\":\"/now-playing\",\"active-class\":\"is-active\",\"exact\":\"\"}},[_c('div',{staticClass:\"is-clipped\"},[_c('p',{staticClass:\"is-size-7 fd-is-text-clipped\"},[_c('strong',[_vm._v(_vm._s(_vm.now_playing.title))]),_c('br'),_vm._v(\" \"+_vm._s(_vm.now_playing.artist)),(_vm.now_playing.data_kind === 'url')?_c('span',[_vm._v(\" - \"+_vm._s(_vm.now_playing.album))]):_vm._e()])])]):_vm._e(),(_vm.is_now_playing_page)?_c('player-button-previous',{staticClass:\"navbar-item fd-margin-left-auto\",attrs:{\"icon_style\":\"mdi-24px\"}}):_vm._e(),(_vm.is_now_playing_page)?_c('player-button-seek-back',{staticClass:\"navbar-item\",attrs:{\"seek_ms\":\"10000\",\"icon_style\":\"mdi-24px\"}}):_vm._e(),_c('player-button-play-pause',{staticClass:\"navbar-item\",attrs:{\"icon_style\":\"mdi-36px\",\"show_disabled_message\":\"\"}}),(_vm.is_now_playing_page)?_c('player-button-seek-forward',{staticClass:\"navbar-item\",attrs:{\"seek_ms\":\"30000\",\"icon_style\":\"mdi-24px\"}}):_vm._e(),(_vm.is_now_playing_page)?_c('player-button-next',{staticClass:\"navbar-item\",attrs:{\"icon_style\":\"mdi-24px\"}}):_vm._e(),_c('a',{staticClass:\"navbar-item fd-margin-left-auto is-hidden-desktop\",on:{\"click\":function($event){_vm.show_player_menu = !_vm.show_player_menu}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-18px\",class:{ 'mdi-chevron-up': !_vm.show_player_menu, 'mdi-chevron-down': _vm.show_player_menu }})])]),_c('div',{staticClass:\"navbar-item has-dropdown has-dropdown-up fd-margin-left-auto is-hidden-touch\",class:{ 'is-active': _vm.show_player_menu }},[_c('a',{staticClass:\"navbar-link is-arrowless\",on:{\"click\":function($event){_vm.show_player_menu = !_vm.show_player_menu}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-18px\",class:{ 'mdi-chevron-up': !_vm.show_player_menu, 'mdi-chevron-down': _vm.show_player_menu }})])]),_c('div',{staticClass:\"navbar-dropdown is-right is-boxed\",staticStyle:{\"margin-right\":\"6px\",\"margin-bottom\":\"6px\",\"border-radius\":\"6px\"}},[_c('div',{staticClass:\"navbar-item\"},[_c('div',{staticClass:\"level is-mobile\"},[_c('div',{staticClass:\"level-left fd-expanded\"},[_c('div',{staticClass:\"level-item\",staticStyle:{\"flex-grow\":\"0\"}},[_c('a',{staticClass:\"button is-white is-small\",on:{\"click\":_vm.toggle_mute_volume}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-18px\",class:{ 'mdi-volume-off': _vm.player.volume <= 0, 'mdi-volume-high': _vm.player.volume > 0 }})])])]),_c('div',{staticClass:\"level-item fd-expanded\"},[_c('div',{staticClass:\"fd-expanded\"},[_c('p',{staticClass:\"heading\"},[_vm._v(\"Volume\")]),_c('range-slider',{staticClass:\"slider fd-has-action\",attrs:{\"min\":\"0\",\"max\":\"100\",\"step\":\"1\",\"value\":_vm.player.volume},on:{\"change\":_vm.set_volume}})],1)])])])]),_c('hr',{staticClass:\"fd-navbar-divider\"}),_vm._l((_vm.outputs),function(output){return _c('navbar-item-output',{key:output.id,attrs:{\"output\":output}})}),_c('hr',{staticClass:\"fd-navbar-divider\"}),_c('div',{staticClass:\"navbar-item\"},[_c('div',{staticClass:\"level is-mobile\"},[_c('div',{staticClass:\"level-left fd-expanded\"},[_c('div',{staticClass:\"level-item\",staticStyle:{\"flex-grow\":\"0\"}},[_c('a',{staticClass:\"button is-white is-small\",class:{ 'is-loading': _vm.loading }},[_c('span',{staticClass:\"icon fd-has-action\",class:{ 'has-text-grey-light': !_vm.playing && !_vm.loading, 'is-loading': _vm.loading },on:{\"click\":_vm.togglePlay}},[_c('i',{staticClass:\"mdi mdi-18px mdi-radio-tower\"})])])]),_c('div',{staticClass:\"level-item fd-expanded\"},[_c('div',{staticClass:\"fd-expanded\"},[_c('p',{staticClass:\"heading\",class:{ 'has-text-grey-light': !_vm.playing }},[_vm._v(\"HTTP stream \"),_vm._m(0)]),_c('range-slider',{staticClass:\"slider fd-has-action\",attrs:{\"min\":\"0\",\"max\":\"100\",\"step\":\"1\",\"disabled\":!_vm.playing,\"value\":_vm.stream_volume},on:{\"change\":_vm.set_stream_volume}})],1)])])])]),_c('hr',{staticClass:\"fd-navbar-divider\"}),_c('div',{staticClass:\"navbar-item\"},[_c('div',{staticClass:\"level is-mobile fd-expanded\"},[_c('div',{staticClass:\"level-item\"},[_c('div',{staticClass:\"buttons has-addons\"},[_c('player-button-repeat',{staticClass:\"button\"}),_c('player-button-shuffle',{staticClass:\"button\"}),_c('player-button-consume',{staticClass:\"button\"})],1)])])])],2)])],1),_c('div',{staticClass:\"navbar-menu is-hidden-desktop\",class:{ 'is-active': _vm.show_player_menu }},[_c('div',{staticClass:\"navbar-start\"}),_c('div',{staticClass:\"navbar-end\"},[_c('div',{staticClass:\"navbar-item\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('player-button-repeat',{staticClass:\"button\",attrs:{\"icon_style\":\"mdi-18px\"}}),_c('player-button-shuffle',{staticClass:\"button\",attrs:{\"icon_style\":\"mdi-18px\"}}),_c('player-button-consume',{staticClass:\"button\",attrs:{\"icon_style\":\"mdi-18px\"}})],1)]),_c('hr',{staticClass:\"fd-navbar-divider\"}),_c('div',{staticClass:\"navbar-item\"},[_c('div',{staticClass:\"level is-mobile\"},[_c('div',{staticClass:\"level-left fd-expanded\"},[_c('div',{staticClass:\"level-item\",staticStyle:{\"flex-grow\":\"0\"}},[_c('a',{staticClass:\"button is-white is-small\",on:{\"click\":_vm.toggle_mute_volume}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-18px\",class:{ 'mdi-volume-off': _vm.player.volume <= 0, 'mdi-volume-high': _vm.player.volume > 0 }})])])]),_c('div',{staticClass:\"level-item fd-expanded\"},[_c('div',{staticClass:\"fd-expanded\"},[_c('p',{staticClass:\"heading\"},[_vm._v(\"Volume\")]),_c('range-slider',{staticClass:\"slider fd-has-action\",attrs:{\"min\":\"0\",\"max\":\"100\",\"step\":\"1\",\"value\":_vm.player.volume},on:{\"change\":_vm.set_volume}})],1)])])])]),_vm._l((_vm.outputs),function(output){return _c('navbar-item-output',{key:output.id,attrs:{\"output\":output}})}),_c('hr',{staticClass:\"fd-navbar-divider\"}),_c('div',{staticClass:\"navbar-item fd-has-margin-bottom\"},[_c('div',{staticClass:\"level is-mobile\"},[_c('div',{staticClass:\"level-left fd-expanded\"},[_c('div',{staticClass:\"level-item\",staticStyle:{\"flex-grow\":\"0\"}},[_c('a',{staticClass:\"button is-white is-small\",class:{ 'is-loading': _vm.loading }},[_c('span',{staticClass:\"icon fd-has-action\",class:{ 'has-text-grey-light': !_vm.playing && !_vm.loading, 'is-loading': _vm.loading },on:{\"click\":_vm.togglePlay}},[_c('i',{staticClass:\"mdi mdi-18px mdi-radio-tower\"})])])]),_c('div',{staticClass:\"level-item fd-expanded\"},[_c('div',{staticClass:\"fd-expanded\"},[_c('p',{staticClass:\"heading\",class:{ 'has-text-grey-light': !_vm.playing }},[_vm._v(\"HTTP stream \"),_vm._m(1)]),_c('range-slider',{staticClass:\"slider fd-has-action\",attrs:{\"min\":\"0\",\"max\":\"100\",\"step\":\"1\",\"disabled\":!_vm.playing,\"value\":_vm.stream_volume},on:{\"change\":_vm.set_stream_volume}})],1)])])])])],2)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"href\":\"stream.mp3\"}},[_c('span',{staticClass:\"is-lowercase\"},[_vm._v(\"(stream.mp3)\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"href\":\"stream.mp3\"}},[_c('span',{staticClass:\"is-lowercase\"},[_vm._v(\"(stream.mp3)\")])])}]\n\nexport { render, staticRenderFns }","import Vue from 'vue'\nimport Vuex from 'vuex'\nimport * as types from './mutation_types'\n\nVue.use(Vuex)\n\nexport default new Vuex.Store({\n state: {\n config: {\n websocket_port: 0,\n version: '',\n buildoptions: []\n },\n settings: {\n categories: []\n },\n library: {\n artists: 0,\n albums: 0,\n songs: 0,\n db_playtime: 0,\n updating: false\n },\n audiobooks_count: { },\n podcasts_count: { },\n rss_count: { },\n outputs: [],\n player: {\n state: 'stop',\n repeat: 'off',\n consume: false,\n shuffle: false,\n volume: 0,\n item_id: 0,\n item_length_ms: 0,\n item_progress_ms: 0\n },\n queue: {\n version: 0,\n count: 0,\n items: []\n },\n lastfm: {},\n spotify: {},\n pairing: {},\n\n spotify_new_releases: [],\n spotify_featured_playlists: [],\n\n notifications: {\n next_id: 1,\n list: []\n },\n recent_searches: [],\n\n hide_singles: false,\n hide_spotify: false,\n artists_sort: 'Name',\n artist_albums_sort: 'Name',\n albums_sort: 'Name',\n show_only_next_items: false,\n show_burger_menu: false,\n show_player_menu: false,\n show_update_dialog: false,\n update_dialog_scan_kind: ''\n },\n\n getters: {\n now_playing: state => {\n const item = state.queue.items.find(function (item) {\n return item.id === state.player.item_id\n })\n return (item === undefined) ? {} : item\n },\n\n settings_webinterface: state => {\n if (state.settings) {\n return state.settings.categories.find(elem => elem.name === 'webinterface')\n }\n return null\n },\n\n settings_option_recently_added_limit: (state, getters) => {\n if (getters.settings_webinterface) {\n const option = getters.settings_webinterface.options.find(elem => elem.name === 'recently_added_limit')\n if (option) {\n return option.value\n }\n }\n return 100\n },\n\n settings_option_show_composer_now_playing: (state, getters) => {\n if (getters.settings_webinterface) {\n const option = getters.settings_webinterface.options.find(elem => elem.name === 'show_composer_now_playing')\n if (option) {\n return option.value\n }\n }\n return false\n },\n\n settings_option_show_composer_for_genre: (state, getters) => {\n if (getters.settings_webinterface) {\n const option = getters.settings_webinterface.options.find(elem => elem.name === 'show_composer_for_genre')\n if (option) {\n return option.value\n }\n }\n return null\n },\n\n settings_category: (state) => (categoryName) => {\n return state.settings.categories.find(elem => elem.name === categoryName)\n },\n\n settings_option: (state) => (categoryName, optionName) => {\n const category = state.settings.categories.find(elem => elem.name === categoryName)\n if (!category) {\n return {}\n }\n return category.options.find(elem => elem.name === optionName)\n }\n },\n\n mutations: {\n [types.UPDATE_CONFIG] (state, config) {\n state.config = config\n },\n [types.UPDATE_SETTINGS] (state, settings) {\n state.settings = settings\n },\n [types.UPDATE_SETTINGS_OPTION] (state, option) {\n const settingCategory = state.settings.categories.find(elem => elem.name === option.category)\n const settingOption = settingCategory.options.find(elem => elem.name === option.name)\n settingOption.value = option.value\n },\n [types.UPDATE_LIBRARY_STATS] (state, libraryStats) {\n state.library = libraryStats\n },\n [types.UPDATE_LIBRARY_AUDIOBOOKS_COUNT] (state, count) {\n state.audiobooks_count = count\n },\n [types.UPDATE_LIBRARY_PODCASTS_COUNT] (state, count) {\n state.podcasts_count = count\n },\n [types.UPDATE_LIBRARY_RSS_COUNT] (state, count) {\n state.rss_count = count\n },\n [types.UPDATE_OUTPUTS] (state, outputs) {\n state.outputs = outputs\n },\n [types.UPDATE_PLAYER_STATUS] (state, playerStatus) {\n state.player = playerStatus\n },\n [types.UPDATE_QUEUE] (state, queue) {\n state.queue = queue\n },\n [types.UPDATE_LASTFM] (state, lastfm) {\n state.lastfm = lastfm\n },\n [types.UPDATE_SPOTIFY] (state, spotify) {\n state.spotify = spotify\n },\n [types.UPDATE_PAIRING] (state, pairing) {\n state.pairing = pairing\n },\n [types.SPOTIFY_NEW_RELEASES] (state, newReleases) {\n state.spotify_new_releases = newReleases\n },\n [types.SPOTIFY_FEATURED_PLAYLISTS] (state, featuredPlaylists) {\n state.spotify_featured_playlists = featuredPlaylists\n },\n [types.ADD_NOTIFICATION] (state, notification) {\n if (notification.topic) {\n const index = state.notifications.list.findIndex(elem => elem.topic === notification.topic)\n if (index >= 0) {\n state.notifications.list.splice(index, 1, notification)\n return\n }\n }\n state.notifications.list.push(notification)\n },\n [types.DELETE_NOTIFICATION] (state, notification) {\n const index = state.notifications.list.indexOf(notification)\n\n if (index !== -1) {\n state.notifications.list.splice(index, 1)\n }\n },\n [types.ADD_RECENT_SEARCH] (state, query) {\n const index = state.recent_searches.findIndex(elem => elem === query)\n if (index >= 0) {\n state.recent_searches.splice(index, 1)\n }\n\n state.recent_searches.splice(0, 0, query)\n\n if (state.recent_searches.length > 5) {\n state.recent_searches.pop()\n }\n },\n [types.HIDE_SINGLES] (state, hideSingles) {\n state.hide_singles = hideSingles\n },\n [types.HIDE_SPOTIFY] (state, hideSpotify) {\n state.hide_spotify = hideSpotify\n },\n [types.ARTISTS_SORT] (state, sort) {\n state.artists_sort = sort\n },\n [types.ARTIST_ALBUMS_SORT] (state, sort) {\n state.artist_albums_sort = sort\n },\n [types.ALBUMS_SORT] (state, sort) {\n state.albums_sort = sort\n },\n [types.SHOW_ONLY_NEXT_ITEMS] (state, showOnlyNextItems) {\n state.show_only_next_items = showOnlyNextItems\n },\n [types.SHOW_BURGER_MENU] (state, showBurgerMenu) {\n state.show_burger_menu = showBurgerMenu\n },\n [types.SHOW_PLAYER_MENU] (state, showPlayerMenu) {\n state.show_player_menu = showPlayerMenu\n },\n [types.SHOW_UPDATE_DIALOG] (state, showUpdateDialog) {\n state.show_update_dialog = showUpdateDialog\n },\n [types.UPDATE_DIALOG_SCAN_KIND] (state, scanKind) {\n state.update_dialog_scan_kind = scanKind\n }\n },\n\n actions: {\n add_notification ({ commit, state }, notification) {\n const newNotification = {\n id: state.notifications.next_id++,\n type: notification.type,\n text: notification.text,\n topic: notification.topic,\n timeout: notification.timeout\n }\n\n commit(types.ADD_NOTIFICATION, newNotification)\n\n if (notification.timeout > 0) {\n setTimeout(() => {\n commit(types.DELETE_NOTIFICATION, newNotification)\n }, notification.timeout)\n }\n }\n }\n})\n","import axios from 'axios'\nimport store from '@/store'\n\naxios.interceptors.response.use(function (response) {\n return response\n}, function (error) {\n if (error.request.status && error.request.responseURL) {\n store.dispatch('add_notification', { text: 'Request failed (status: ' + error.request.status + ' ' + error.request.statusText + ', url: ' + error.request.responseURL + ')', type: 'danger' })\n }\n return Promise.reject(error)\n})\n\nexport default {\n config () {\n return axios.get('./api/config')\n },\n\n settings () {\n return axios.get('./api/settings')\n },\n\n settings_update (categoryName, option) {\n return axios.put('./api/settings/' + categoryName + '/' + option.name, option)\n },\n\n library_stats () {\n return axios.get('./api/library')\n },\n\n library_update (scanKind) {\n const params = {}\n if (scanKind) {\n params.scan_kind = scanKind\n }\n return axios.put('./api/update', undefined, { params: params })\n },\n\n library_rescan (scanKind) {\n const params = {}\n if (scanKind) {\n params.scan_kind = scanKind\n }\n return axios.put('./api/rescan', undefined, { params: params })\n },\n\n library_count (expression) {\n return axios.get('./api/library/count?expression=' + expression)\n },\n\n queue () {\n return axios.get('./api/queue')\n },\n\n queue_clear () {\n return axios.put('./api/queue/clear')\n },\n\n queue_remove (itemId) {\n return axios.delete('./api/queue/items/' + itemId)\n },\n\n queue_move (itemId, newPosition) {\n return axios.put('./api/queue/items/' + itemId + '?new_position=' + newPosition)\n },\n\n queue_add (uri) {\n return axios.post('./api/queue/items/add?uris=' + uri).then((response) => {\n store.dispatch('add_notification', { text: response.data.count + ' tracks appended to queue', type: 'info', timeout: 2000 })\n return Promise.resolve(response)\n })\n },\n\n queue_add_next (uri) {\n let position = 0\n if (store.getters.now_playing && store.getters.now_playing.id) {\n position = store.getters.now_playing.position + 1\n }\n return axios.post('./api/queue/items/add?uris=' + uri + '&position=' + position).then((response) => {\n store.dispatch('add_notification', { text: response.data.count + ' tracks appended to queue', type: 'info', timeout: 2000 })\n return Promise.resolve(response)\n })\n },\n\n queue_expression_add (expression) {\n const options = {}\n options.expression = expression\n\n return axios.post('./api/queue/items/add', undefined, { params: options }).then((response) => {\n store.dispatch('add_notification', { text: response.data.count + ' tracks appended to queue', type: 'info', timeout: 2000 })\n return Promise.resolve(response)\n })\n },\n\n queue_expression_add_next (expression) {\n const options = {}\n options.expression = expression\n options.position = 0\n if (store.getters.now_playing && store.getters.now_playing.id) {\n options.position = store.getters.now_playing.position + 1\n }\n\n return axios.post('./api/queue/items/add', undefined, { params: options }).then((response) => {\n store.dispatch('add_notification', { text: response.data.count + ' tracks appended to queue', type: 'info', timeout: 2000 })\n return Promise.resolve(response)\n })\n },\n\n queue_save_playlist (name) {\n return axios.post('./api/queue/save', undefined, { params: { name: name } }).then((response) => {\n store.dispatch('add_notification', { text: 'Queue saved to playlist \"' + name + '\"', type: 'info', timeout: 2000 })\n return Promise.resolve(response)\n })\n },\n\n player_status () {\n return axios.get('./api/player')\n },\n\n player_play_uri (uris, shuffle, position = undefined) {\n const options = {}\n options.uris = uris\n options.shuffle = shuffle ? 'true' : 'false'\n options.clear = 'true'\n options.playback = 'start'\n options.playback_from_position = position\n\n return axios.post('./api/queue/items/add', undefined, { params: options })\n },\n\n player_play_expression (expression, shuffle, position = undefined) {\n const options = {}\n options.expression = expression\n options.shuffle = shuffle ? 'true' : 'false'\n options.clear = 'true'\n options.playback = 'start'\n options.playback_from_position = position\n\n return axios.post('./api/queue/items/add', undefined, { params: options })\n },\n\n player_play (options = {}) {\n return axios.put('./api/player/play', undefined, { params: options })\n },\n\n player_playpos (position) {\n return axios.put('./api/player/play?position=' + position)\n },\n\n player_playid (itemId) {\n return axios.put('./api/player/play?item_id=' + itemId)\n },\n\n player_pause () {\n return axios.put('./api/player/pause')\n },\n\n player_stop () {\n return axios.put('./api/player/stop')\n },\n\n player_next () {\n return axios.put('./api/player/next')\n },\n\n player_previous () {\n return axios.put('./api/player/previous')\n },\n\n player_shuffle (newState) {\n const shuffle = newState ? 'true' : 'false'\n return axios.put('./api/player/shuffle?state=' + shuffle)\n },\n\n player_consume (newState) {\n const consume = newState ? 'true' : 'false'\n return axios.put('./api/player/consume?state=' + consume)\n },\n\n player_repeat (newRepeatMode) {\n return axios.put('./api/player/repeat?state=' + newRepeatMode)\n },\n\n player_volume (volume) {\n return axios.put('./api/player/volume?volume=' + volume)\n },\n\n player_output_volume (outputId, outputVolume) {\n return axios.put('./api/player/volume?volume=' + outputVolume + '&output_id=' + outputId)\n },\n\n player_seek_to_pos (newPosition) {\n return axios.put('./api/player/seek?position_ms=' + newPosition)\n },\n\n player_seek (seekMs) {\n return axios.put('./api/player/seek?seek_ms=' + seekMs)\n },\n\n outputs () {\n return axios.get('./api/outputs')\n },\n\n output_update (outputId, output) {\n return axios.put('./api/outputs/' + outputId, output)\n },\n\n output_toggle (outputId) {\n return axios.put('./api/outputs/' + outputId + '/toggle')\n },\n\n library_artists (media_kind = undefined) {\n return axios.get('./api/library/artists', { params: { media_kind: media_kind } })\n },\n\n library_artist (artistId) {\n return axios.get('./api/library/artists/' + artistId)\n },\n\n library_artist_albums (artistId) {\n return axios.get('./api/library/artists/' + artistId + '/albums')\n },\n\n library_albums (media_kind = undefined) {\n return axios.get('./api/library/albums', { params: { media_kind: media_kind } })\n },\n\n library_album (albumId) {\n return axios.get('./api/library/albums/' + albumId)\n },\n\n library_album_tracks (albumId, filter = { limit: -1, offset: 0 }) {\n return axios.get('./api/library/albums/' + albumId + '/tracks', {\n params: filter\n })\n },\n\n library_album_track_update (albumId, attributes) {\n return axios.put('./api/library/albums/' + albumId + '/tracks', undefined, { params: attributes })\n },\n\n library_genres () {\n return axios.get('./api/library/genres')\n },\n\n library_genre (genre) {\n const genreParams = {\n type: 'albums',\n media_kind: 'music',\n expression: 'genre is \"' + genre + '\"'\n }\n return axios.get('./api/search', {\n params: genreParams\n })\n },\n\n library_genre_tracks (genre) {\n const genreParams = {\n type: 'tracks',\n media_kind: 'music',\n expression: 'genre is \"' + genre + '\"'\n }\n return axios.get('./api/search', {\n params: genreParams\n })\n },\n\n library_radio_streams () {\n const params = {\n type: 'tracks',\n media_kind: 'music',\n expression: 'data_kind is url and song_length = 0'\n }\n return axios.get('./api/search', {\n params: params\n })\n },\n\n library_composers () {\n return axios.get('./api/library/composers')\n },\n\n library_composer (composer) {\n const params = {\n type: 'albums',\n media_kind: 'music',\n expression: 'composer is \"' + composer + '\"'\n }\n return axios.get('./api/search', {\n params: params\n })\n },\n\n library_composer_tracks (composer) {\n const params = {\n type: 'tracks',\n media_kind: 'music',\n expression: 'composer is \"' + composer + '\"'\n }\n return axios.get('./api/search', {\n params: params\n })\n },\n\n library_artist_tracks (artist) {\n if (artist) {\n const artistParams = {\n type: 'tracks',\n expression: 'songartistid is \"' + artist + '\"'\n }\n return axios.get('./api/search', {\n params: artistParams\n })\n }\n },\n\n library_podcasts_new_episodes () {\n const episodesParams = {\n type: 'tracks',\n expression: 'media_kind is podcast and play_count = 0 ORDER BY time_added DESC'\n }\n return axios.get('./api/search', {\n params: episodesParams\n })\n },\n\n library_podcast_episodes (albumId) {\n const episodesParams = {\n type: 'tracks',\n expression: 'media_kind is podcast and songalbumid is \"' + albumId + '\" ORDER BY date_released DESC'\n }\n return axios.get('./api/search', {\n params: episodesParams\n })\n },\n\n library_add (url) {\n return axios.post('./api/library/add', undefined, { params: { url: url } })\n },\n\n library_playlist_delete (playlistId) {\n return axios.delete('./api/library/playlists/' + playlistId, undefined)\n },\n\n library_playlists () {\n return axios.get('./api/library/playlists')\n },\n\n library_playlist_folder (playlistId = 0) {\n return axios.get('./api/library/playlists/' + playlistId + '/playlists')\n },\n\n library_playlist (playlistId) {\n return axios.get('./api/library/playlists/' + playlistId)\n },\n\n library_playlist_tracks (playlistId) {\n return axios.get('./api/library/playlists/' + playlistId + '/tracks')\n },\n\n library_track (trackId) {\n return axios.get('./api/library/tracks/' + trackId)\n },\n\n library_track_playlists (trackId) {\n return axios.get('./api/library/tracks/' + trackId + '/playlists')\n },\n\n library_track_update (trackId, attributes = {}) {\n return axios.put('./api/library/tracks/' + trackId, undefined, { params: attributes })\n },\n\n library_files (directory = undefined) {\n const filesParams = { directory: directory }\n return axios.get('./api/library/files', {\n params: filesParams\n })\n },\n\n search (searchParams) {\n return axios.get('./api/search', {\n params: searchParams\n })\n },\n\n spotify () {\n return axios.get('./api/spotify')\n },\n\n spotify_login (credentials) {\n return axios.post('./api/spotify-login', credentials)\n },\n\n spotify_logout () {\n return axios.get('./api/spotify-logout')\n },\n\n lastfm () {\n return axios.get('./api/lastfm')\n },\n\n lastfm_login (credentials) {\n return axios.post('./api/lastfm-login', credentials)\n },\n\n lastfm_logout (credentials) {\n return axios.get('./api/lastfm-logout')\n },\n\n pairing () {\n return axios.get('./api/pairing')\n },\n\n pairing_kickoff (pairingReq) {\n return axios.post('./api/pairing', pairingReq)\n },\n\n artwork_url_append_size_params (artworkUrl, maxwidth = 600, maxheight = 600) {\n if (artworkUrl && artworkUrl.startsWith('/')) {\n if (artworkUrl.includes('?')) {\n return artworkUrl + '&maxwidth=' + maxwidth + '&maxheight=' + maxheight\n }\n return artworkUrl + '?maxwidth=' + maxwidth + '&maxheight=' + maxheight\n }\n return artworkUrl\n }\n}\n","/**\n * Audio handler object\n * Taken from https://github.com/rainner/soma-fm-player (released under MIT licence)\n */\nexport default {\n _audio: new Audio(),\n _context: null,\n _source: null,\n _gain: null,\n\n // setup audio routing\n setupAudio () {\n const AudioContext = window.AudioContext || window.webkitAudioContext\n this._context = new AudioContext()\n this._source = this._context.createMediaElementSource(this._audio)\n this._gain = this._context.createGain()\n\n this._source.connect(this._gain)\n this._gain.connect(this._context.destination)\n\n this._audio.addEventListener('canplaythrough', e => {\n this._audio.play()\n })\n this._audio.addEventListener('canplay', e => {\n this._audio.play()\n })\n return this._audio\n },\n\n // set audio volume\n setVolume (volume) {\n if (!this._gain) return\n volume = parseFloat(volume) || 0.0\n volume = (volume < 0) ? 0 : volume\n volume = (volume > 1) ? 1 : volume\n this._gain.gain.value = volume\n },\n\n // play audio source url\n playSource (source) {\n this.stopAudio()\n this._context.resume().then(() => {\n this._audio.src = String(source || '') + '?x=' + Date.now()\n this._audio.crossOrigin = 'anonymous'\n this._audio.load()\n })\n },\n\n // stop playing audio\n stopAudio () {\n try { this._audio.pause() } catch (e) {}\n try { this._audio.stop() } catch (e) {}\n try { this._audio.close() } catch (e) {}\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"navbar-item\"},[_c('div',{staticClass:\"level is-mobile\"},[_c('div',{staticClass:\"level-left fd-expanded\"},[_c('div',{staticClass:\"level-item\",staticStyle:{\"flex-grow\":\"0\"}},[_c('a',{staticClass:\"button is-white is-small\"},[_c('span',{staticClass:\"icon fd-has-action\",class:{ 'has-text-grey-light': !_vm.output.selected },on:{\"click\":_vm.set_enabled}},[_c('i',{staticClass:\"mdi mdi-18px\",class:_vm.type_class,attrs:{\"title\":_vm.output.type}})])])]),_c('div',{staticClass:\"level-item fd-expanded\"},[_c('div',{staticClass:\"fd-expanded\"},[_c('p',{staticClass:\"heading\",class:{ 'has-text-grey-light': !_vm.output.selected }},[_vm._v(_vm._s(_vm.output.name))]),_c('range-slider',{staticClass:\"slider fd-has-action\",attrs:{\"min\":\"0\",\"max\":\"100\",\"step\":\"1\",\"disabled\":!_vm.output.selected,\"value\":_vm.volume},on:{\"change\":_vm.set_volume}})],1)])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"navbar-item\">\n <div class=\"level is-mobile\">\n <div class=\"level-left fd-expanded\">\n <div class=\"level-item\" style=\"flex-grow: 0;\">\n <a class=\"button is-white is-small\">\n <span class=\"icon fd-has-action\"\n :class=\"{ 'has-text-grey-light': !output.selected }\"\n v-on:click=\"set_enabled\">\n <i class=\"mdi mdi-18px\" :class=\"type_class\" :title=\"output.type\"></i>\n </span>\n </a>\n </div>\n <div class=\"level-item fd-expanded\">\n <div class=\"fd-expanded\">\n <p class=\"heading\" :class=\"{ 'has-text-grey-light': !output.selected }\">{{ output.name }}</p>\n <range-slider\n class=\"slider fd-has-action\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n :disabled=\"!output.selected\"\n :value=\"volume\"\n @change=\"set_volume\" >\n </range-slider>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport RangeSlider from 'vue-range-slider'\nimport webapi from '@/webapi'\n\nexport default {\n name: 'NavbarItemOutput',\n components: { RangeSlider },\n\n props: ['output'],\n\n computed: {\n type_class () {\n if (this.output.type.startsWith('AirPlay')) {\n return 'mdi-airplay'\n } else if (this.output.type === 'Chromecast') {\n return 'mdi-cast'\n } else if (this.output.type === 'fifo') {\n return 'mdi-pipe'\n } else {\n return 'mdi-server'\n }\n },\n\n volume () {\n return this.output.selected ? this.output.volume : 0\n }\n },\n\n methods: {\n play_next: function () {\n webapi.player_next()\n },\n\n set_volume: function (newVolume) {\n webapi.player_output_volume(this.output.id, newVolume)\n },\n\n set_enabled: function () {\n const values = {\n selected: !this.output.selected\n }\n webapi.output_update(this.output.id, values)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarItemOutput.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarItemOutput.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavbarItemOutput.vue?vue&type=template&id=df9b1590&\"\nimport script from \"./NavbarItemOutput.vue?vue&type=script&lang=js&\"\nexport * from \"./NavbarItemOutput.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.toggle_play_pause}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi\",class:[_vm.icon_style, { 'mdi-play': !_vm.is_playing, 'mdi-pause': _vm.is_playing && _vm.is_pause_allowed, 'mdi-stop': _vm.is_playing && !_vm.is_pause_allowed }]})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a @click=\"toggle_play_pause\" :disabled=\"disabled\">\n <span class=\"icon\"><i class=\"mdi\" :class=\"[icon_style, { 'mdi-play': !is_playing, 'mdi-pause': is_playing && is_pause_allowed, 'mdi-stop': is_playing && !is_pause_allowed }]\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonPlayPause',\n\n props: {\n icon_style: String,\n show_disabled_message: Boolean\n },\n\n computed: {\n is_playing () {\n return this.$store.state.player.state === 'play'\n },\n\n is_pause_allowed () {\n return (this.$store.getters.now_playing &&\n this.$store.getters.now_playing.data_kind !== 'pipe')\n },\n\n disabled () {\n return !this.$store.state.queue || this.$store.state.queue.count <= 0\n }\n },\n\n methods: {\n toggle_play_pause: function () {\n if (this.disabled) {\n if (this.show_disabled_message) {\n this.$store.dispatch('add_notification', { text: 'Queue is empty', type: 'info', topic: 'connection', timeout: 2000 })\n }\n return\n }\n\n if (this.is_playing && this.is_pause_allowed) {\n webapi.player_pause()\n } else if (this.is_playing && !this.is_pause_allowed) {\n webapi.player_stop()\n } else {\n webapi.player_play()\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonPlayPause.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonPlayPause.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerButtonPlayPause.vue?vue&type=template&id=160e1e94&\"\nimport script from \"./PlayerButtonPlayPause.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerButtonPlayPause.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.play_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-skip-forward\",class:_vm.icon_style})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a @click=\"play_next\" :disabled=\"disabled\">\n <span class=\"icon\"><i class=\"mdi mdi-skip-forward\" :class=\"icon_style\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonNext',\n\n props: {\n icon_style: String\n },\n\n computed: {\n disabled () {\n return !this.$store.state.queue || this.$store.state.queue.count <= 0\n }\n },\n\n methods: {\n play_next: function () {\n if (this.disabled) {\n return\n }\n\n webapi.player_next()\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonNext.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonNext.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerButtonNext.vue?vue&type=template&id=105fa0b7&\"\nimport script from \"./PlayerButtonNext.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerButtonNext.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.play_previous}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-skip-backward\",class:_vm.icon_style})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a @click=\"play_previous\" :disabled=\"disabled\">\n <span class=\"icon\"><i class=\"mdi mdi-skip-backward\" :class=\"icon_style\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonPrevious',\n\n props: {\n icon_style: String\n },\n\n computed: {\n disabled () {\n return !this.$store.state.queue || this.$store.state.queue.count <= 0\n }\n },\n\n methods: {\n play_previous: function () {\n if (this.disabled) {\n return\n }\n\n webapi.player_previous()\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonPrevious.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonPrevious.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerButtonPrevious.vue?vue&type=template&id=de93cb4e&\"\nimport script from \"./PlayerButtonPrevious.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerButtonPrevious.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{class:{ 'is-warning': _vm.is_shuffle },on:{\"click\":_vm.toggle_shuffle_mode}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi\",class:[_vm.icon_style, { 'mdi-shuffle': _vm.is_shuffle, 'mdi-shuffle-disabled': !_vm.is_shuffle }]})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a @click=\"toggle_shuffle_mode\" :class=\"{ 'is-warning': is_shuffle }\">\n <span class=\"icon\"><i class=\"mdi\" :class=\"[icon_style, { 'mdi-shuffle': is_shuffle, 'mdi-shuffle-disabled': !is_shuffle }]\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonShuffle',\n\n props: {\n icon_style: String\n },\n\n computed: {\n is_shuffle () {\n return this.$store.state.player.shuffle\n }\n },\n\n methods: {\n toggle_shuffle_mode: function () {\n webapi.player_shuffle(!this.is_shuffle)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonShuffle.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonShuffle.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerButtonShuffle.vue?vue&type=template&id=6c682bca&\"\nimport script from \"./PlayerButtonShuffle.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerButtonShuffle.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{class:{ 'is-warning': _vm.is_consume },on:{\"click\":_vm.toggle_consume_mode}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-fire\",class:_vm.icon_style})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a @click=\"toggle_consume_mode\" :class=\"{ 'is-warning': is_consume }\">\n <span class=\"icon\"><i class=\"mdi mdi-fire\" :class=\"icon_style\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonConsume',\n\n props: {\n icon_style: String\n },\n\n computed: {\n is_consume () {\n return this.$store.state.player.consume\n }\n },\n\n methods: {\n toggle_consume_mode: function () {\n webapi.player_consume(!this.is_consume)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonConsume.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonConsume.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerButtonConsume.vue?vue&type=template&id=652605a0&\"\nimport script from \"./PlayerButtonConsume.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerButtonConsume.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{class:{ 'is-warning': !_vm.is_repeat_off },on:{\"click\":_vm.toggle_repeat_mode}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi\",class:[_vm.icon_style, { 'mdi-repeat': _vm.is_repeat_all, 'mdi-repeat-once': _vm.is_repeat_single, 'mdi-repeat-off': _vm.is_repeat_off }]})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a @click=\"toggle_repeat_mode\" :class=\"{ 'is-warning': !is_repeat_off }\">\n <span class=\"icon\"><i class=\"mdi\" :class=\"[icon_style, { 'mdi-repeat': is_repeat_all, 'mdi-repeat-once': is_repeat_single, 'mdi-repeat-off': is_repeat_off }]\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonRepeat',\n\n props: {\n icon_style: String\n },\n\n computed: {\n is_repeat_all () {\n return this.$store.state.player.repeat === 'all'\n },\n is_repeat_single () {\n return this.$store.state.player.repeat === 'single'\n },\n is_repeat_off () {\n return !this.is_repeat_all && !this.is_repeat_single\n }\n },\n\n methods: {\n toggle_repeat_mode: function () {\n if (this.is_repeat_all) {\n webapi.player_repeat('single')\n } else if (this.is_repeat_single) {\n webapi.player_repeat('off')\n } else {\n webapi.player_repeat('all')\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonRepeat.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonRepeat.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerButtonRepeat.vue?vue&type=template&id=76c131bd&\"\nimport script from \"./PlayerButtonRepeat.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerButtonRepeat.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.visible)?_c('a',{attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.seek}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-rewind\",class:_vm.icon_style})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a @click=\"seek\" :disabled=\"disabled\" v-if=\"visible\">\n <span class=\"icon\"><i class=\"mdi mdi-rewind\" :class=\"icon_style\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonSeekBack',\n props: ['seek_ms', 'icon_style'],\n\n computed: {\n now_playing () {\n return this.$store.getters.now_playing\n },\n is_stopped () {\n return this.$store.state.player.state === 'stop'\n },\n disabled () {\n return !this.$store.state.queue || this.$store.state.queue.count <= 0 || this.is_stopped ||\n this.now_playing.data_kind === 'pipe'\n },\n visible () {\n return ['podcast', 'audiobook'].includes(this.now_playing.media_kind)\n }\n },\n\n methods: {\n seek: function () {\n if (!this.disabled) {\n webapi.player_seek(this.seek_ms * -1)\n }\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonSeekBack.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonSeekBack.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerButtonSeekBack.vue?vue&type=template&id=6e68196d&\"\nimport script from \"./PlayerButtonSeekBack.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerButtonSeekBack.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.visible)?_c('a',{attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.seek}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-fast-forward\",class:_vm.icon_style})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a @click=\"seek\" :disabled=\"disabled\" v-if=\"visible\">\n <span class=\"icon\"><i class=\"mdi mdi-fast-forward\" :class=\"icon_style\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonSeekForward',\n props: ['seek_ms', 'icon_style'],\n\n computed: {\n now_playing () {\n return this.$store.getters.now_playing\n },\n is_stopped () {\n return this.$store.state.player.state === 'stop'\n },\n disabled () {\n return !this.$store.state.queue || this.$store.state.queue.count <= 0 || this.is_stopped ||\n this.now_playing.data_kind === 'pipe'\n },\n visible () {\n return ['podcast', 'audiobook'].includes(this.now_playing.media_kind)\n }\n },\n\n methods: {\n seek: function () {\n if (!this.disabled) {\n webapi.player_seek(this.seek_ms)\n }\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonSeekForward.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonSeekForward.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerButtonSeekForward.vue?vue&type=template&id=2f43a35a&\"\nimport script from \"./PlayerButtonSeekForward.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerButtonSeekForward.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <nav class=\"fd-bottom-navbar navbar is-white is-fixed-bottom\" :style=\"zindex\" :class=\"{ 'is-transparent': is_now_playing_page, 'is-dark': !is_now_playing_page }\" role=\"navigation\" aria-label=\"player controls\">\n <div class=\"navbar-brand fd-expanded\">\n\n <!-- Link to queue -->\n <navbar-item-link to=\"/\" exact>\n <span class=\"icon\"><i class=\"mdi mdi-24px mdi-playlist-play\"></i></span>\n </navbar-item-link>\n\n <!-- Now playing artist/title (not visible on \"now playing\" page) -->\n <router-link to=\"/now-playing\" v-if=\"!is_now_playing_page\" class=\"navbar-item is-expanded is-clipped\" active-class=\"is-active\" exact>\n <div class=\"is-clipped\">\n <p class=\"is-size-7 fd-is-text-clipped\">\n <strong>{{ now_playing.title }}</strong><br>\n {{ now_playing.artist }}<span v-if=\"now_playing.data_kind === 'url'\"> - {{ now_playing.album }}</span>\n </p>\n </div>\n </router-link>\n\n <!-- Skip previous (not visible on \"now playing\" page) -->\n <player-button-previous v-if=\"is_now_playing_page\" class=\"navbar-item fd-margin-left-auto\" icon_style=\"mdi-24px\"></player-button-previous>\n <player-button-seek-back v-if=\"is_now_playing_page\" seek_ms=\"10000\" class=\"navbar-item\" icon_style=\"mdi-24px\"></player-button-seek-back>\n <!-- Play/pause -->\n <player-button-play-pause class=\"navbar-item\" icon_style=\"mdi-36px\" show_disabled_message></player-button-play-pause>\n <player-button-seek-forward v-if=\"is_now_playing_page\" seek_ms=\"30000\" class=\"navbar-item\" icon_style=\"mdi-24px\"></player-button-seek-forward>\n <!-- Skip next (not visible on \"now playing\" page) -->\n <player-button-next v-if=\"is_now_playing_page\" class=\"navbar-item\" icon_style=\"mdi-24px\"></player-button-next>\n\n <!-- Player menu button (only visible on mobile and tablet) -->\n <a class=\"navbar-item fd-margin-left-auto is-hidden-desktop\" @click=\"show_player_menu = !show_player_menu\">\n <span class=\"icon\"><i class=\"mdi mdi-18px\" :class=\"{ 'mdi-chevron-up': !show_player_menu, 'mdi-chevron-down': show_player_menu }\"></i></span>\n </a>\n\n <!-- Player menu dropup menu (only visible on desktop) -->\n <div class=\"navbar-item has-dropdown has-dropdown-up fd-margin-left-auto is-hidden-touch\"\n :class=\"{ 'is-active': show_player_menu }\">\n <a class=\"navbar-link is-arrowless\"\n @click=\"show_player_menu = !show_player_menu\">\n <span class=\"icon\"><i class=\"mdi mdi-18px\"\n :class=\"{ 'mdi-chevron-up': !show_player_menu, 'mdi-chevron-down': show_player_menu }\"></i></span>\n </a>\n\n <div class=\"navbar-dropdown is-right is-boxed\" style=\"margin-right: 6px; margin-bottom: 6px; border-radius: 6px;\">\n <div class=\"navbar-item\">\n <!-- Outputs: master volume -->\n <div class=\"level is-mobile\">\n <div class=\"level-left fd-expanded\">\n <div class=\"level-item\" style=\"flex-grow: 0;\">\n <a class=\"button is-white is-small\" @click=\"toggle_mute_volume\">\n <span class=\"icon\"><i class=\"mdi mdi-18px\" :class=\"{ 'mdi-volume-off': player.volume <= 0, 'mdi-volume-high': player.volume > 0 }\"></i></span>\n </a>\n </div>\n <div class=\"level-item fd-expanded\">\n <div class=\"fd-expanded\">\n <p class=\"heading\">Volume</p>\n <range-slider\n class=\"slider fd-has-action\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n :value=\"player.volume\"\n @change=\"set_volume\">\n </range-slider>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Outputs: master volume -->\n <hr class=\"fd-navbar-divider\">\n <navbar-item-output v-for=\"output in outputs\" :key=\"output.id\" :output=\"output\"></navbar-item-output>\n\n <!-- Outputs: stream volume -->\n <hr class=\"fd-navbar-divider\">\n <div class=\"navbar-item\">\n <div class=\"level is-mobile\">\n <div class=\"level-left fd-expanded\">\n <div class=\"level-item\" style=\"flex-grow: 0;\">\n <a class=\"button is-white is-small\" :class=\"{ 'is-loading': loading }\"><span class=\"icon fd-has-action\" :class=\"{ 'has-text-grey-light': !playing && !loading, 'is-loading': loading }\" @click=\"togglePlay\"><i class=\"mdi mdi-18px mdi-radio-tower\"></i></span></a>\n </div>\n <div class=\"level-item fd-expanded\">\n <div class=\"fd-expanded\">\n <p class=\"heading\" :class=\"{ 'has-text-grey-light': !playing }\">HTTP stream <a href=\"stream.mp3\"><span class=\"is-lowercase\">(stream.mp3)</span></a></p>\n <range-slider\n class=\"slider fd-has-action\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n :disabled=\"!playing\"\n :value=\"stream_volume\"\n @change=\"set_stream_volume\">\n </range-slider>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Playback controls -->\n <hr class=\"fd-navbar-divider\">\n <div class=\"navbar-item\">\n <div class=\"level is-mobile fd-expanded\">\n <div class=\"level-item\">\n <div class=\"buttons has-addons\">\n <player-button-repeat class=\"button\"></player-button-repeat>\n <player-button-shuffle class=\"button\"></player-button-shuffle>\n <player-button-consume class=\"button\"></player-button-consume>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Player menu (only visible on mobile and tablet) -->\n <div class=\"navbar-menu is-hidden-desktop\" :class=\"{ 'is-active': show_player_menu }\">\n <div class=\"navbar-start\">\n </div>\n <div class=\"navbar-end\">\n <!-- Repeat/shuffle/consume -->\n <div class=\"navbar-item\">\n <div class=\"buttons is-centered\">\n <player-button-repeat class=\"button\" icon_style=\"mdi-18px\"></player-button-repeat>\n <player-button-shuffle class=\"button\" icon_style=\"mdi-18px\"></player-button-shuffle>\n <player-button-consume class=\"button\" icon_style=\"mdi-18px\"></player-button-consume>\n </div>\n </div>\n\n <hr class=\"fd-navbar-divider\">\n\n <!-- Outputs: master volume -->\n <div class=\"navbar-item\">\n <div class=\"level is-mobile\">\n <div class=\"level-left fd-expanded\">\n <div class=\"level-item\" style=\"flex-grow: 0;\">\n <a class=\"button is-white is-small\" @click=\"toggle_mute_volume\">\n <span class=\"icon\"><i class=\"mdi mdi-18px\" :class=\"{ 'mdi-volume-off': player.volume <= 0, 'mdi-volume-high': player.volume > 0 }\"></i></span>\n </a>\n </div>\n <div class=\"level-item fd-expanded\">\n <div class=\"fd-expanded\">\n <p class=\"heading\">Volume</p>\n <range-slider\n class=\"slider fd-has-action\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n :value=\"player.volume\"\n @change=\"set_volume\">\n </range-slider>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Outputs: speaker volumes -->\n <navbar-item-output v-for=\"output in outputs\" :key=\"output.id\" :output=\"output\"></navbar-item-output>\n\n <!-- Outputs: stream volume -->\n <hr class=\"fd-navbar-divider\">\n <div class=\"navbar-item fd-has-margin-bottom\">\n <div class=\"level is-mobile\">\n <div class=\"level-left fd-expanded\">\n <div class=\"level-item\" style=\"flex-grow: 0;\">\n <a class=\"button is-white is-small\" :class=\"{ 'is-loading': loading }\">\n <span class=\"icon fd-has-action\"\n :class=\"{ 'has-text-grey-light': !playing && !loading, 'is-loading': loading }\"\n @click=\"togglePlay\"><i class=\"mdi mdi-18px mdi-radio-tower\"></i>\n </span>\n </a>\n </div>\n <div class=\"level-item fd-expanded\">\n <div class=\"fd-expanded\">\n <p class=\"heading\" :class=\"{ 'has-text-grey-light': !playing }\">HTTP stream <a href=\"stream.mp3\"><span class=\"is-lowercase\">(stream.mp3)</span></a></p>\n <range-slider\n class=\"slider fd-has-action\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n :disabled=\"!playing\"\n :value=\"stream_volume\"\n @change=\"set_stream_volume\">\n </range-slider>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </nav>\n</template>\n\n<script>\nimport webapi from '@/webapi'\nimport _audio from '@/audio'\nimport NavbarItemLink from './NavbarItemLink'\nimport NavbarItemOutput from './NavbarItemOutput'\nimport PlayerButtonPlayPause from '@/components/PlayerButtonPlayPause'\nimport PlayerButtonNext from '@/components/PlayerButtonNext'\nimport PlayerButtonPrevious from '@/components/PlayerButtonPrevious'\nimport PlayerButtonShuffle from '@/components/PlayerButtonShuffle'\nimport PlayerButtonConsume from '@/components/PlayerButtonConsume'\nimport PlayerButtonRepeat from '@/components/PlayerButtonRepeat'\nimport PlayerButtonSeekBack from '@/components/PlayerButtonSeekBack'\nimport PlayerButtonSeekForward from '@/components/PlayerButtonSeekForward'\nimport RangeSlider from 'vue-range-slider'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'NavbarBottom',\n components: {\n NavbarItemLink,\n NavbarItemOutput,\n RangeSlider,\n PlayerButtonPlayPause,\n PlayerButtonNext,\n PlayerButtonPrevious,\n PlayerButtonShuffle,\n PlayerButtonConsume,\n PlayerButtonRepeat,\n PlayerButtonSeekForward,\n PlayerButtonSeekBack\n },\n\n data () {\n return {\n old_volume: 0,\n\n playing: false,\n loading: false,\n stream_volume: 10,\n\n show_outputs_menu: false,\n show_desktop_outputs_menu: false\n }\n },\n\n computed: {\n show_player_menu: {\n get () {\n return this.$store.state.show_player_menu\n },\n set (value) {\n this.$store.commit(types.SHOW_PLAYER_MENU, value)\n }\n },\n\n show_burger_menu () {\n return this.$store.state.show_burger_menu\n },\n\n zindex () {\n if (this.show_burger_menu) {\n return 'z-index: 20'\n }\n return ''\n },\n\n state () {\n return this.$store.state.player\n },\n now_playing () {\n return this.$store.getters.now_playing\n },\n is_now_playing_page () {\n return this.$route.path === '/now-playing'\n },\n outputs () {\n return this.$store.state.outputs\n },\n\n player () {\n return this.$store.state.player\n },\n\n config () {\n return this.$store.state.config\n }\n },\n\n methods: {\n on_click_outside_outputs () {\n this.show_outputs_menu = false\n },\n\n set_volume: function (newVolume) {\n webapi.player_volume(newVolume)\n },\n\n toggle_mute_volume: function () {\n if (this.player.volume > 0) {\n this.set_volume(0)\n } else {\n this.set_volume(this.old_volume)\n }\n },\n\n setupAudio: function () {\n const a = _audio.setupAudio()\n\n a.addEventListener('waiting', e => {\n this.playing = false\n this.loading = true\n })\n a.addEventListener('playing', e => {\n this.playing = true\n this.loading = false\n })\n a.addEventListener('ended', e => {\n this.playing = false\n this.loading = false\n })\n a.addEventListener('error', e => {\n this.closeAudio()\n this.$store.dispatch('add_notification', { text: 'HTTP stream error: failed to load stream or stopped loading due to network problem', type: 'danger' })\n this.playing = false\n this.loading = false\n })\n },\n\n // close active audio\n closeAudio: function () {\n _audio.stopAudio()\n this.playing = false\n },\n\n playChannel: function () {\n if (this.playing) {\n return\n }\n\n const channel = '/stream.mp3'\n this.loading = true\n _audio.playSource(channel)\n _audio.setVolume(this.stream_volume / 100)\n },\n\n togglePlay: function () {\n if (this.loading) {\n return\n }\n if (this.playing) {\n return this.closeAudio()\n }\n return this.playChannel()\n },\n\n set_stream_volume: function (newVolume) {\n this.stream_volume = newVolume\n _audio.setVolume(this.stream_volume / 100)\n }\n },\n\n watch: {\n '$store.state.player.volume' () {\n if (this.player.volume > 0) {\n this.old_volume = this.player.volume\n }\n }\n },\n\n // on app mounted\n mounted () {\n this.setupAudio()\n },\n\n // on app destroyed\n destroyed () {\n this.closeAudio()\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarBottom.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarBottom.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavbarBottom.vue?vue&type=template&id=7bc29059&\"\nimport script from \"./NavbarBottom.vue?vue&type=script&lang=js&\"\nexport * from \"./NavbarBottom.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.notifications.length > 0)?_c('section',{staticClass:\"fd-notifications\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-half\"},_vm._l((_vm.notifications),function(notification){return _c('div',{key:notification.id,staticClass:\"notification has-shadow \",class:['notification', notification.type ? (\"is-\" + (notification.type)) : '']},[_c('button',{staticClass:\"delete\",on:{\"click\":function($event){return _vm.remove(notification)}}}),_vm._v(\" \"+_vm._s(notification.text)+\" \")])}),0)])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section class=\"fd-notifications\" v-if=\"notifications.length > 0\">\n <div class=\"columns is-centered\">\n <div class=\"column is-half\">\n <div class=\"notification has-shadow \" v-for=\"notification in notifications\" :key=\"notification.id\" :class=\"['notification', notification.type ? `is-${notification.type}` : '']\">\n <button class=\"delete\" v-on:click=\"remove(notification)\"></button>\n {{ notification.text }}\n </div>\n </div>\n </div>\n </section>\n</template>\n\n<script>\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'Notifications',\n components: { },\n\n data () {\n return { showNav: false }\n },\n\n computed: {\n notifications () {\n return this.$store.state.notifications.list\n }\n },\n\n methods: {\n remove: function (notification) {\n this.$store.commit(types.DELETE_NOTIFICATION, notification)\n }\n }\n}\n</script>\n\n<style>\n.fd-notifications {\n position: fixed;\n bottom: 60px;\n z-index: 20000;\n width: 100%;\n}\n.fd-notifications .notification {\n margin-bottom: 10px;\n margin-left: 24px;\n margin-right: 24px;\n box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notifications.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notifications.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Notifications.vue?vue&type=template&id=922b3d54&\"\nimport script from \"./Notifications.vue?vue&type=script&lang=js&\"\nexport * from \"./Notifications.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Notifications.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\" Remote pairing request \")]),_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.kickoff_pairing.apply(null, arguments)}}},[_c('label',{staticClass:\"label\"},[_vm._v(\" \"+_vm._s(_vm.pairing.remote)+\" \")]),_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.pairing_req.pin),expression:\"pairing_req.pin\"}],ref:\"pin_field\",staticClass:\"input\",attrs:{\"type\":\"text\",\"placeholder\":\"Enter pairing code\"},domProps:{\"value\":(_vm.pairing_req.pin)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.pairing_req, \"pin\", $event.target.value)}}})])])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-danger\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-cancel\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Cancel\")])]),_c('a',{staticClass:\"card-footer-item has-background-info has-text-white has-text-weight-bold\",on:{\"click\":_vm.kickoff_pairing}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-cellphone-iphone\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Pair Remote\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n Remote pairing request\n </p>\n <form v-on:submit.prevent=\"kickoff_pairing\">\n <label class=\"label\">\n {{ pairing.remote }}\n </label>\n <div class=\"field\">\n <div class=\"control\">\n <input class=\"input\" type=\"text\" placeholder=\"Enter pairing code\" v-model=\"pairing_req.pin\" ref=\"pin_field\">\n </div>\n </div>\n </form>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-danger\" @click=\"$emit('close')\">\n <span class=\"icon\"><i class=\"mdi mdi-cancel\"></i></span> <span class=\"is-size-7\">Cancel</span>\n </a>\n <a class=\"card-footer-item has-background-info has-text-white has-text-weight-bold\" @click=\"kickoff_pairing\">\n <span class=\"icon\"><i class=\"mdi mdi-cellphone-iphone\"></i></span> <span class=\"is-size-7\">Pair Remote</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogRemotePairing',\n props: ['show'],\n\n data () {\n return {\n pairing_req: { pin: '' }\n }\n },\n\n computed: {\n pairing () {\n return this.$store.state.pairing\n }\n },\n\n methods: {\n kickoff_pairing () {\n webapi.pairing_kickoff(this.pairing_req).then(() => {\n this.pairing_req.pin = ''\n })\n }\n },\n\n watch: {\n 'show' () {\n if (this.show) {\n this.loading = false\n\n // We need to delay setting the focus to the input field until the field is part of the dom and visible\n setTimeout(() => {\n this.$refs.pin_field.focus()\n }, 10)\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogRemotePairing.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogRemotePairing.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogRemotePairing.vue?vue&type=template&id=4491cb33&\"\nimport script from \"./ModalDialogRemotePairing.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogRemotePairing.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('modal-dialog',{attrs:{\"show\":_vm.show,\"title\":\"Update library\",\"ok_action\":_vm.library.updating ? '' : 'Rescan',\"close_action\":\"Close\"},on:{\"ok\":_vm.update_library,\"close\":function($event){return _vm.close()}}},[_c('template',{slot:\"modal-content\"},[(!_vm.library.updating)?_c('div',[_c('p',{staticClass:\"mb-3\"},[_vm._v(\"Scan for new, deleted and modified files\")]),(_vm.spotify_enabled || _vm.rss.tracks > 0)?_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control\"},[_c('div',{staticClass:\"select is-small\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.update_dialog_scan_kind),expression:\"update_dialog_scan_kind\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.update_dialog_scan_kind=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',{attrs:{\"value\":\"\"}},[_vm._v(\"Update everything\")]),_c('option',{attrs:{\"value\":\"files\"}},[_vm._v(\"Only update local library\")]),(_vm.spotify_enabled)?_c('option',{attrs:{\"value\":\"spotify\"}},[_vm._v(\"Only update Spotify\")]):_vm._e(),(_vm.rss.tracks > 0)?_c('option',{attrs:{\"value\":\"rss\"}},[_vm._v(\"Only update RSS feeds\")]):_vm._e()])])])]):_vm._e(),_c('div',{staticClass:\"field\"},[_c('label',{staticClass:\"checkbox is-size-7 is-small\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.rescan_metadata),expression:\"rescan_metadata\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.rescan_metadata)?_vm._i(_vm.rescan_metadata,null)>-1:(_vm.rescan_metadata)},on:{\"change\":function($event){var $$a=_vm.rescan_metadata,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.rescan_metadata=$$a.concat([$$v]))}else{$$i>-1&&(_vm.rescan_metadata=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.rescan_metadata=$$c}}}}),_vm._v(\" Rescan metadata for unmodified files \")])])]):_c('div',[_c('p',{staticClass:\"mb-3\"},[_vm._v(\"Library update in progress ...\")])])])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[(_vm.title)?_c('p',{staticClass:\"title is-4\"},[_vm._v(\" \"+_vm._s(_vm.title)+\" \")]):_vm._e(),_vm._t(\"modal-content\")],2),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-cancel\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(_vm._s(_vm.close_action ? _vm.close_action : 'Cancel'))])]),(_vm.delete_action)?_c('a',{staticClass:\"card-footer-item has-background-danger has-text-white has-text-weight-bold\",on:{\"click\":function($event){return _vm.$emit('delete')}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-delete\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(_vm._s(_vm.delete_action))])]):_vm._e(),(_vm.ok_action)?_c('a',{staticClass:\"card-footer-item has-background-info has-text-white has-text-weight-bold\",on:{\"click\":function($event){return _vm.$emit('ok')}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-check\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(_vm._s(_vm.ok_action))])]):_vm._e()])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\" v-if=\"title\">\n {{ title }}\n </p>\n <slot name=\"modal-content\"></slot>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"$emit('close')\">\n <span class=\"icon\"><i class=\"mdi mdi-cancel\"></i></span> <span class=\"is-size-7\">{{ close_action ? close_action : 'Cancel' }}</span>\n </a>\n <a v-if=\"delete_action\" class=\"card-footer-item has-background-danger has-text-white has-text-weight-bold\" @click=\"$emit('delete')\">\n <span class=\"icon\"><i class=\"mdi mdi-delete\"></i></span> <span class=\"is-size-7\">{{ delete_action }}</span>\n </a>\n <a v-if=\"ok_action\" class=\"card-footer-item has-background-info has-text-white has-text-weight-bold\" @click=\"$emit('ok')\">\n <span class=\"icon\"><i class=\"mdi mdi-check\"></i></span> <span class=\"is-size-7\">{{ ok_action }}</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'ModalDialog',\n props: ['show', 'title', 'ok_action', 'delete_action', 'close_action']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialog.vue?vue&type=template&id=5739f0bd&\"\nimport script from \"./ModalDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <modal-dialog\n :show=\"show\"\n title=\"Update library\"\n :ok_action=\"library.updating ? '' : 'Rescan'\"\n close_action=\"Close\"\n @ok=\"update_library\"\n @close=\"close()\">\n <template slot=\"modal-content\">\n <div v-if=\"!library.updating\">\n <p class=\"mb-3\">Scan for new, deleted and modified files</p>\n <div class=\"field\" v-if=\"spotify_enabled || rss.tracks > 0\">\n <div class=\"control\">\n <div class=\"select is-small\">\n <select v-model=\"update_dialog_scan_kind\">\n <option value=\"\">Update everything</option>\n <option value=\"files\">Only update local library</option>\n <option value=\"spotify\" v-if=\"spotify_enabled\">Only update Spotify</option>\n <option value=\"rss\" v-if=\"rss.tracks > 0\">Only update RSS feeds</option>\n </select>\n </div>\n </div>\n </div>\n <div class=\"field\">\n <label class=\"checkbox is-size-7 is-small\">\n <input type=\"checkbox\" v-model=\"rescan_metadata\">\n Rescan metadata for unmodified files\n </label>\n </div>\n </div>\n <div v-else>\n <p class=\"mb-3\">Library update in progress ...</p>\n </div>\n </template>\n </modal-dialog>\n</template>\n\n<script>\nimport ModalDialog from '@/components/ModalDialog'\nimport * as types from '@/store/mutation_types'\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogUpdate',\n components: { ModalDialog },\n props: ['show'],\n\n data () {\n return {\n rescan_metadata: false\n }\n },\n\n computed: {\n library () {\n return this.$store.state.library\n },\n\n rss () {\n return this.$store.state.rss_count\n },\n\n spotify_enabled () {\n return this.$store.state.spotify.webapi_token_valid\n },\n\n update_dialog_scan_kind: {\n get () {\n return this.$store.state.update_dialog_scan_kind\n },\n set (value) {\n this.$store.commit(types.UPDATE_DIALOG_SCAN_KIND, value)\n }\n }\n },\n\n methods: {\n update_library () {\n if (this.rescan_metadata) {\n webapi.library_rescan(this.update_dialog_scan_kind)\n } else {\n webapi.library_update(this.update_dialog_scan_kind)\n }\n },\n\n close () {\n this.update_dialog_scan_kind = ''\n this.$emit('close')\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogUpdate.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogUpdate.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogUpdate.vue?vue&type=template&id=6d126b6a&\"\nimport script from \"./ModalDialogUpdate.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogUpdate.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div id=\"app\">\n <navbar-top />\n <vue-progress-bar class=\"fd-progress-bar\" />\n <transition name=\"fade\">\n <!-- Setting v-show to true on the router-view tag avoids jumpiness during transitions -->\n <router-view v-show=\"true\" />\n </transition>\n <modal-dialog-remote-pairing :show=\"pairing_active\" @close=\"pairing_active = false\" />\n <modal-dialog-update\n :show=\"show_update_dialog\"\n @close=\"show_update_dialog = false\" />\n <notifications v-show=\"!show_burger_menu\" />\n <navbar-bottom />\n <div class=\"fd-overlay-fullscreen\" v-show=\"show_burger_menu || show_player_menu\"\n @click=\"show_burger_menu = show_player_menu = false\"></div>\n </div>\n</template>\n\n<script>\nimport NavbarTop from '@/components/NavbarTop'\nimport NavbarBottom from '@/components/NavbarBottom'\nimport Notifications from '@/components/Notifications'\nimport ModalDialogRemotePairing from '@/components/ModalDialogRemotePairing'\nimport ModalDialogUpdate from '@/components/ModalDialogUpdate'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\nimport ReconnectingWebSocket from 'reconnectingwebsocket'\nimport moment from 'moment'\n\nexport default {\n name: 'App',\n components: { NavbarTop, NavbarBottom, Notifications, ModalDialogRemotePairing, ModalDialogUpdate },\n template: '<App/>',\n\n data () {\n return {\n token_timer_id: 0,\n reconnect_attempts: 0,\n pairing_active: false\n }\n },\n\n computed: {\n show_burger_menu: {\n get () {\n return this.$store.state.show_burger_menu\n },\n set (value) {\n this.$store.commit(types.SHOW_BURGER_MENU, value)\n }\n },\n show_player_menu: {\n get () {\n return this.$store.state.show_player_menu\n },\n set (value) {\n this.$store.commit(types.SHOW_PLAYER_MENU, value)\n }\n },\n show_update_dialog: {\n get () {\n return this.$store.state.show_update_dialog\n },\n set (value) {\n this.$store.commit(types.SHOW_UPDATE_DIALOG, value)\n }\n }\n },\n\n created: function () {\n moment.locale(navigator.language)\n this.connect()\n\n // Start the progress bar on app start\n this.$Progress.start()\n\n // Hook the progress bar to start before we move router-view\n this.$router.beforeEach((to, from, next) => {\n if (to.meta.show_progress) {\n if (to.meta.progress !== undefined) {\n const meta = to.meta.progress\n this.$Progress.parseMeta(meta)\n }\n this.$Progress.start()\n }\n next()\n })\n\n // hook the progress bar to finish after we've finished moving router-view\n this.$router.afterEach((to, from) => {\n if (to.meta.show_progress) {\n this.$Progress.finish()\n }\n })\n },\n\n methods: {\n connect: function () {\n this.$store.dispatch('add_notification', { text: 'Connecting to OwnTone server', type: 'info', topic: 'connection', timeout: 2000 })\n\n webapi.config().then(({ data }) => {\n this.$store.commit(types.UPDATE_CONFIG, data)\n this.$store.commit(types.HIDE_SINGLES, data.hide_singles)\n document.title = data.library_name\n\n this.open_ws()\n this.$Progress.finish()\n }).catch(() => {\n this.$store.dispatch('add_notification', { text: 'Failed to connect to OwnTone server', type: 'danger', topic: 'connection' })\n })\n },\n\n open_ws: function () {\n if (this.$store.state.config.websocket_port <= 0) {\n this.$store.dispatch('add_notification', { text: 'Missing websocket port', type: 'danger' })\n return\n }\n\n const vm = this\n\n let protocol = 'ws://'\n if (window.location.protocol === 'https:') {\n protocol = 'wss://'\n }\n\n let wsUrl = protocol + window.location.hostname + ':' + vm.$store.state.config.websocket_port\n if (process.env.NODE_ENV === 'development' && process.env.VUE_APP_WEBSOCKET_SERVER) {\n // If we are running in the development server, use the websocket url configured in .env.development\n wsUrl = process.env.VUE_APP_WEBSOCKET_SERVER\n }\n\n const socket = new ReconnectingWebSocket(\n wsUrl,\n 'notify',\n { reconnectInterval: 3000 }\n )\n\n socket.onopen = function () {\n vm.$store.dispatch('add_notification', { text: 'Connection to server established', type: 'primary', topic: 'connection', timeout: 2000 })\n vm.reconnect_attempts = 0\n socket.send(JSON.stringify({ notify: ['update', 'database', 'player', 'options', 'outputs', 'volume', 'queue', 'spotify', 'lastfm', 'pairing'] }))\n\n vm.update_outputs()\n vm.update_player_status()\n vm.update_library_stats()\n vm.update_settings()\n vm.update_queue()\n vm.update_spotify()\n vm.update_lastfm()\n vm.update_pairing()\n }\n socket.onclose = function () {\n // vm.$store.dispatch('add_notification', { text: 'Connection closed', type: 'danger', timeout: 2000 })\n }\n socket.onerror = function () {\n vm.reconnect_attempts++\n vm.$store.dispatch('add_notification', { text: 'Connection lost. Reconnecting ... (' + vm.reconnect_attempts + ')', type: 'danger', topic: 'connection' })\n }\n socket.onmessage = function (response) {\n const data = JSON.parse(response.data)\n if (data.notify.includes('update') || data.notify.includes('database')) {\n vm.update_library_stats()\n }\n if (data.notify.includes('player') || data.notify.includes('options') || data.notify.includes('volume')) {\n vm.update_player_status()\n }\n if (data.notify.includes('outputs') || data.notify.includes('volume')) {\n vm.update_outputs()\n }\n if (data.notify.includes('queue')) {\n vm.update_queue()\n }\n if (data.notify.includes('spotify')) {\n vm.update_spotify()\n }\n if (data.notify.includes('lastfm')) {\n vm.update_lastfm()\n }\n if (data.notify.includes('pairing')) {\n vm.update_pairing()\n }\n }\n },\n\n update_library_stats: function () {\n webapi.library_stats().then(({ data }) => {\n this.$store.commit(types.UPDATE_LIBRARY_STATS, data)\n })\n webapi.library_count('media_kind is audiobook').then(({ data }) => {\n this.$store.commit(types.UPDATE_LIBRARY_AUDIOBOOKS_COUNT, data)\n })\n webapi.library_count('media_kind is podcast').then(({ data }) => {\n this.$store.commit(types.UPDATE_LIBRARY_PODCASTS_COUNT, data)\n })\n webapi.library_count('scan_kind is rss').then(({ data }) => {\n this.$store.commit(types.UPDATE_LIBRARY_RSS_COUNT, data)\n })\n },\n\n update_outputs: function () {\n webapi.outputs().then(({ data }) => {\n this.$store.commit(types.UPDATE_OUTPUTS, data.outputs)\n })\n },\n\n update_player_status: function () {\n webapi.player_status().then(({ data }) => {\n this.$store.commit(types.UPDATE_PLAYER_STATUS, data)\n })\n },\n\n update_queue: function () {\n webapi.queue().then(({ data }) => {\n this.$store.commit(types.UPDATE_QUEUE, data)\n })\n },\n\n update_settings: function () {\n webapi.settings().then(({ data }) => {\n this.$store.commit(types.UPDATE_SETTINGS, data)\n })\n },\n\n update_lastfm: function () {\n webapi.lastfm().then(({ data }) => {\n this.$store.commit(types.UPDATE_LASTFM, data)\n })\n },\n\n update_spotify: function () {\n webapi.spotify().then(({ data }) => {\n this.$store.commit(types.UPDATE_SPOTIFY, data)\n\n if (this.token_timer_id > 0) {\n window.clearTimeout(this.token_timer_id)\n this.token_timer_id = 0\n }\n if (data.webapi_token_expires_in > 0 && data.webapi_token) {\n this.token_timer_id = window.setTimeout(this.update_spotify, 1000 * data.webapi_token_expires_in)\n }\n })\n },\n\n update_pairing: function () {\n webapi.pairing().then(({ data }) => {\n this.$store.commit(types.UPDATE_PAIRING, data)\n this.pairing_active = data.active\n })\n },\n\n update_is_clipped: function () {\n if (this.show_burger_menu || this.show_player_menu) {\n document.querySelector('html').classList.add('is-clipped')\n } else {\n document.querySelector('html').classList.remove('is-clipped')\n }\n }\n },\n\n watch: {\n 'show_burger_menu' () {\n this.update_is_clipped()\n },\n 'show_player_menu' () {\n this.update_is_clipped()\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--13-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=40407fbd&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.queue.count)+\" tracks\")]),_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Queue\")])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small\",class:{ 'is-info': _vm.show_only_next_items },on:{\"click\":_vm.update_show_next_items}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-arrow-collapse-down\"})]),_c('span',[_vm._v(\"Hide previous\")])]),_c('a',{staticClass:\"button is-small\",on:{\"click\":_vm.open_add_stream_dialog}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-web\"})]),_c('span',[_vm._v(\"Add Stream\")])]),_c('a',{staticClass:\"button is-small\",class:{ 'is-info': _vm.edit_mode },on:{\"click\":function($event){_vm.edit_mode = !_vm.edit_mode}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-pencil\"})]),_c('span',[_vm._v(\"Edit\")])]),_c('a',{staticClass:\"button is-small\",on:{\"click\":_vm.queue_clear}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-delete-empty\"})]),_c('span',[_vm._v(\"Clear\")])]),(_vm.is_queue_save_allowed)?_c('a',{staticClass:\"button is-small\",attrs:{\"disabled\":_vm.queue_items.length === 0},on:{\"click\":_vm.save_dialog}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-content-save\"})]),_c('span',[_vm._v(\"Save\")])]):_vm._e()])]),_c('template',{slot:\"content\"},[_c('draggable',{attrs:{\"handle\":\".handle\"},on:{\"end\":_vm.move_item},model:{value:(_vm.queue_items),callback:function ($$v) {_vm.queue_items=$$v},expression:\"queue_items\"}},_vm._l((_vm.queue_items),function(item,index){return _c('list-item-queue-item',{key:item.id,attrs:{\"item\":item,\"position\":index,\"current_position\":_vm.current_position,\"show_only_next_items\":_vm.show_only_next_items,\"edit_mode\":_vm.edit_mode}},[_c('template',{slot:\"actions\"},[(!_vm.edit_mode)?_c('a',{on:{\"click\":function($event){return _vm.open_dialog(item)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])]):_vm._e(),(item.id !== _vm.state.item_id && _vm.edit_mode)?_c('a',{on:{\"click\":function($event){return _vm.remove(item)}}},[_c('span',{staticClass:\"icon has-text-grey\"},[_c('i',{staticClass:\"mdi mdi-delete mdi-18px\"})])]):_vm._e()])],2)}),1),_c('modal-dialog-queue-item',{attrs:{\"show\":_vm.show_details_modal,\"item\":_vm.selected_item},on:{\"close\":function($event){_vm.show_details_modal = false}}}),_c('modal-dialog-add-url-stream',{attrs:{\"show\":_vm.show_url_modal},on:{\"close\":function($event){_vm.show_url_modal = false}}}),(_vm.is_queue_save_allowed)?_c('modal-dialog-playlist-save',{attrs:{\"show\":_vm.show_pls_save_modal},on:{\"close\":function($event){_vm.show_pls_save_modal = false}}}):_vm._e()],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"section fd-content\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[(_vm.$slots['options'])?_c('section',[_c('div',{directives:[{name:\"observe-visibility\",rawName:\"v-observe-visibility\",value:(_vm.observer_options),expression:\"observer_options\"}],staticStyle:{\"height\":\"2px\"}}),_vm._t(\"options\"),_c('nav',{staticClass:\"buttons is-centered\",staticStyle:{\"margin-bottom\":\"6px\",\"margin-top\":\"16px\"}},[(!_vm.options_visible)?_c('a',{staticClass:\"button is-small is-white\",on:{\"click\":_vm.scroll_to_top}},[_vm._m(0)]):_c('a',{staticClass:\"button is-small is-white\",on:{\"click\":_vm.scroll_to_content}},[_vm._m(1)])])],2):_vm._e(),_c('div',{class:{'fd-content-with-option': _vm.$slots['options']}},[_c('nav',{staticClass:\"level\",attrs:{\"id\":\"top\"}},[_c('div',{staticClass:\"level-left\"},[_c('div',{staticClass:\"level-item has-text-centered-mobile\"},[_c('div',[_vm._t(\"heading-left\")],2)])]),_c('div',{staticClass:\"level-right has-text-centered-mobile\"},[_vm._t(\"heading-right\")],2)]),_vm._t(\"content\"),_c('div',{staticStyle:{\"margin-top\":\"16px\"}},[_vm._t(\"footer\")],2)],2)])])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-chevron-up\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-chevron-down\"})])}]\n\nexport { render, staticRenderFns }","<template>\n <section class=\"section fd-content\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <section v-if=\"$slots['options']\">\n <div v-observe-visibility=\"observer_options\" style=\"height:2px;\"></div>\n <slot name=\"options\"></slot>\n <nav class=\"buttons is-centered\" style=\"margin-bottom: 6px; margin-top: 16px;\">\n <a v-if=\"!options_visible\" class=\"button is-small is-white\" @click=\"scroll_to_top\"><span class=\"icon is-small\"><i class=\"mdi mdi-chevron-up\"></i></span></a>\n <a v-else class=\"button is-small is-white\" @click=\"scroll_to_content\"><span class=\"icon is-small\"><i class=\"mdi mdi-chevron-down\"></i></span></a>\n </nav>\n </section>\n <div :class=\"{'fd-content-with-option': $slots['options']}\">\n <nav class=\"level\" id=\"top\">\n <!-- Left side -->\n <div class=\"level-left\">\n <div class=\"level-item has-text-centered-mobile\">\n <div>\n <slot name=\"heading-left\"></slot>\n </div>\n </div>\n </div>\n\n <!-- Right side -->\n <div class=\"level-right has-text-centered-mobile\">\n <slot name=\"heading-right\"></slot>\n </div>\n </nav>\n\n <slot name=\"content\"></slot>\n <div style=\"margin-top: 16px;\">\n <slot name=\"footer\"></slot>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n</template>\n\n<script>\nexport default {\n name: 'ContentWithHeading',\n\n data () {\n return {\n options_visible: false,\n observer_options: {\n callback: this.visibilityChanged,\n intersection: {\n rootMargin: '-100px',\n threshold: 0.3\n }\n }\n }\n },\n\n methods: {\n scroll_to_top: function () {\n window.scrollTo({ top: 0, behavior: 'smooth' })\n },\n\n scroll_to_content: function () {\n // window.scrollTo({ top: 80, behavior: 'smooth' })\n if (this.$route.meta.has_tabs) {\n this.$scrollTo('#top', { offset: -140 })\n } else {\n this.$scrollTo('#top', { offset: -100 })\n }\n },\n\n visibilityChanged: function (isVisible) {\n this.options_visible = isVisible\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentWithHeading.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentWithHeading.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ContentWithHeading.vue?vue&type=template&id=94dfd75a&\"\nimport script from \"./ContentWithHeading.vue?vue&type=script&lang=js&\"\nexport * from \"./ContentWithHeading.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.is_next || !_vm.show_only_next_items)?_c('div',{staticClass:\"media\"},[(_vm.edit_mode)?_c('div',{staticClass:\"media-left\"},[_vm._m(0)]):_vm._e(),_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.play}},[_c('h1',{staticClass:\"title is-6\",class:{ 'has-text-primary': _vm.item.id === _vm.state.item_id, 'has-text-grey-light': !_vm.is_next }},[_vm._v(_vm._s(_vm.item.title))]),_c('h2',{staticClass:\"subtitle is-7\",class:{ 'has-text-primary': _vm.item.id === _vm.state.item_id, 'has-text-grey-light': !_vm.is_next, 'has-text-grey': _vm.is_next && _vm.item.id !== _vm.state.item_id }},[_c('b',[_vm._v(_vm._s(_vm.item.artist))])]),_c('h2',{staticClass:\"subtitle is-7\",class:{ 'has-text-primary': _vm.item.id === _vm.state.item_id, 'has-text-grey-light': !_vm.is_next, 'has-text-grey': _vm.is_next && _vm.item.id !== _vm.state.item_id }},[_vm._v(_vm._s(_vm.item.album))])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)]):_vm._e()}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon has-text-grey fd-is-movable handle\"},[_c('i',{staticClass:\"mdi mdi-drag-horizontal mdi-18px\"})])}]\n\nexport { render, staticRenderFns }","<template>\n <div class=\"media\" v-if=\"is_next || !show_only_next_items\">\n <div class=\"media-left\" v-if=\"edit_mode\">\n <span class=\"icon has-text-grey fd-is-movable handle\"><i class=\"mdi mdi-drag-horizontal mdi-18px\"></i></span>\n </div>\n\n <div class=\"media-content fd-has-action is-clipped\" v-on:click=\"play\">\n <h1 class=\"title is-6\" :class=\"{ 'has-text-primary': item.id === state.item_id, 'has-text-grey-light': !is_next }\">{{ item.title }}</h1>\n <h2 class=\"subtitle is-7\" :class=\"{ 'has-text-primary': item.id === state.item_id, 'has-text-grey-light': !is_next, 'has-text-grey': is_next && item.id !== state.item_id }\"><b>{{ item.artist }}</b></h2>\n <h2 class=\"subtitle is-7\" :class=\"{ 'has-text-primary': item.id === state.item_id, 'has-text-grey-light': !is_next, 'has-text-grey': is_next && item.id !== state.item_id }\">{{ item.album }}</h2>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ListItemQueueItem',\n props: ['item', 'position', 'current_position', 'show_only_next_items', 'edit_mode'],\n\n computed: {\n state () {\n return this.$store.state.player\n },\n\n is_next () {\n return this.current_position < 0 || this.position >= this.current_position\n }\n },\n\n methods: {\n play: function () {\n webapi.player_play({ item_id: this.item.id })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemQueueItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemQueueItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListItemQueueItem.vue?vue&type=template&id=58363490&\"\nimport script from \"./ListItemQueueItem.vue?vue&type=script&lang=js&\"\nexport * from \"./ListItemQueueItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\" \"+_vm._s(_vm.item.title)+\" \")]),_c('p',{staticClass:\"subtitle\"},[_vm._v(\" \"+_vm._s(_vm.item.artist)+\" \")]),_c('div',{staticClass:\"content is-small\"},[_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album\")]),(_vm.item.album_id)?_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_album}},[_vm._v(_vm._s(_vm.item.album))]):_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.item.album))])]),(_vm.item.album_artist)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album artist\")]),(_vm.item.album_artist_id)?_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_album_artist}},[_vm._v(_vm._s(_vm.item.album_artist))]):_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.item.album_artist))])]):_vm._e(),(_vm.item.composer)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Composer\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.item.composer))])]):_vm._e(),(_vm.item.year > 0)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Year\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.item.year))])]):_vm._e(),(_vm.item.genre)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Genre\")]),_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_genre}},[_vm._v(_vm._s(_vm.item.genre))])]):_vm._e(),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Track / Disc\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.item.track_number)+\" / \"+_vm._s(_vm.item.disc_number))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Length\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"duration\")(_vm.item.length_ms)))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Path\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.item.path))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Type\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.item.media_kind)+\" - \"+_vm._s(_vm.item.data_kind)+\" \"),(_vm.item.data_kind === 'spotify')?_c('span',{staticClass:\"has-text-weight-normal\"},[_vm._v(\"(\"),_c('a',{on:{\"click\":_vm.open_spotify_artist}},[_vm._v(\"artist\")]),_vm._v(\", \"),_c('a',{on:{\"click\":_vm.open_spotify_album}},[_vm._v(\"album\")]),_vm._v(\")\")]):_vm._e()])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Quality\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(\" \"+_vm._s(_vm.item.type)+\" \"),(_vm.item.samplerate)?_c('span',[_vm._v(\" | \"+_vm._s(_vm.item.samplerate)+\" Hz\")]):_vm._e(),(_vm.item.channels)?_c('span',[_vm._v(\" | \"+_vm._s(_vm._f(\"channels\")(_vm.item.channels)))]):_vm._e(),(_vm.item.bitrate)?_c('span',[_vm._v(\" | \"+_vm._s(_vm.item.bitrate)+\" Kb/s\")]):_vm._e()])])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.remove}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-delete\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Remove\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n {{ item.title }}\n </p>\n <p class=\"subtitle\">\n {{ item.artist }}\n </p>\n <div class=\"content is-small\">\n <p>\n <span class=\"heading\">Album</span>\n <a v-if=\"item.album_id\" class=\"title is-6 has-text-link\" @click=\"open_album\">{{ item.album }}</a>\n <span v-else class=\"title is-6\">{{ item.album }}</span>\n </p>\n <p v-if=\"item.album_artist\">\n <span class=\"heading\">Album artist</span>\n <a v-if=\"item.album_artist_id\" class=\"title is-6 has-text-link\" @click=\"open_album_artist\">{{ item.album_artist }}</a>\n <span v-else class=\"title is-6\">{{ item.album_artist }}</span>\n </p>\n <p v-if=\"item.composer\">\n <span class=\"heading\">Composer</span>\n <span class=\"title is-6\">{{ item.composer }}</span>\n </p>\n <p v-if=\"item.year > 0\">\n <span class=\"heading\">Year</span>\n <span class=\"title is-6\">{{ item.year }}</span>\n </p>\n <p v-if=\"item.genre\">\n <span class=\"heading\">Genre</span>\n <a class=\"title is-6 has-text-link\" @click=\"open_genre\">{{ item.genre }}</a>\n </p>\n <p>\n <span class=\"heading\">Track / Disc</span>\n <span class=\"title is-6\">{{ item.track_number }} / {{ item.disc_number }}</span>\n </p>\n <p>\n <span class=\"heading\">Length</span>\n <span class=\"title is-6\">{{ item.length_ms | duration }}</span>\n </p>\n <p>\n <span class=\"heading\">Path</span>\n <span class=\"title is-6\">{{ item.path }}</span>\n </p>\n <p>\n <span class=\"heading\">Type</span>\n <span class=\"title is-6\">{{ item.media_kind }} - {{ item.data_kind }} <span class=\"has-text-weight-normal\" v-if=\"item.data_kind === 'spotify'\">(<a @click=\"open_spotify_artist\">artist</a>, <a @click=\"open_spotify_album\">album</a>)</span></span>\n </p>\n <p>\n <span class=\"heading\">Quality</span>\n <span class=\"title is-6\">\n {{ item.type }}\n <span v-if=\"item.samplerate\"> | {{ item.samplerate }} Hz</span>\n <span v-if=\"item.channels\"> | {{ item.channels | channels }}</span>\n <span v-if=\"item.bitrate\"> | {{ item.bitrate }} Kb/s</span>\n </span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"remove\">\n <span class=\"icon\"><i class=\"mdi mdi-delete\"></i></span> <span class=\"is-size-7\">Remove</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\nimport SpotifyWebApi from 'spotify-web-api-js'\n\nexport default {\n name: 'ModalDialogQueueItem',\n props: ['show', 'item'],\n\n data () {\n return {\n spotify_track: {}\n }\n },\n\n methods: {\n remove: function () {\n this.$emit('close')\n webapi.queue_remove(this.item.id)\n },\n\n play: function () {\n this.$emit('close')\n webapi.player_play({ item_id: this.item.id })\n },\n\n open_album: function () {\n if (this.media_kind === 'podcast') {\n this.$router.push({ path: '/podcasts/' + this.item.album_id })\n } else if (this.media_kind === 'audiobook') {\n this.$router.push({ path: '/audiobooks/' + this.item.album_id })\n } else {\n this.$router.push({ path: '/music/albums/' + this.item.album_id })\n }\n },\n\n open_album_artist: function () {\n this.$router.push({ path: '/music/artists/' + this.item.album_artist_id })\n },\n\n open_genre: function () {\n this.$router.push({ name: 'Genre', params: { genre: this.item.genre } })\n },\n\n open_spotify_artist: function () {\n this.$emit('close')\n this.$router.push({ path: '/music/spotify/artists/' + this.spotify_track.artists[0].id })\n },\n\n open_spotify_album: function () {\n this.$emit('close')\n this.$router.push({ path: '/music/spotify/albums/' + this.spotify_track.album.id })\n }\n },\n\n watch: {\n 'item' () {\n if (this.item && this.item.data_kind === 'spotify') {\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(this.$store.state.spotify.webapi_token)\n spotifyApi.getTrack(this.item.path.slice(this.item.path.lastIndexOf(':') + 1)).then((response) => {\n this.spotify_track = response\n })\n } else {\n this.spotify_track = {}\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogQueueItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogQueueItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogQueueItem.vue?vue&type=template&id=5521a6c4&\"\nimport script from \"./ModalDialogQueueItem.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogQueueItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\" Add stream URL \")]),_c('form',{staticClass:\"fd-has-margin-bottom\",on:{\"submit\":function($event){$event.preventDefault();return _vm.play.apply(null, arguments)}}},[_c('div',{staticClass:\"field\"},[_c('p',{staticClass:\"control is-expanded has-icons-left\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.url),expression:\"url\"}],ref:\"url_field\",staticClass:\"input is-shadowless\",attrs:{\"type\":\"text\",\"placeholder\":\"http://url-to-stream\",\"disabled\":_vm.loading},domProps:{\"value\":(_vm.url)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.url=$event.target.value}}}),_c('span',{staticClass:\"icon is-left\"},[_c('i',{staticClass:\"mdi mdi-web\"})])])])])]),(_vm.loading)?_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\"},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-web\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Loading ...\")])])]):_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-danger\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-cancel\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Cancel\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.add_stream}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-background-info has-text-white has-text-weight-bold\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n Add stream URL\n </p>\n <form v-on:submit.prevent=\"play\" class=\"fd-has-margin-bottom\">\n <div class=\"field\">\n <p class=\"control is-expanded has-icons-left\">\n <input class=\"input is-shadowless\" type=\"text\" placeholder=\"http://url-to-stream\" v-model=\"url\" :disabled=\"loading\" ref=\"url_field\">\n <span class=\"icon is-left\">\n <i class=\"mdi mdi-web\"></i>\n </span>\n </p>\n </div>\n </form>\n </div>\n <footer class=\"card-footer\" v-if=\"loading\">\n <a class=\"card-footer-item has-text-dark\">\n <span class=\"icon\"><i class=\"mdi mdi-web\"></i></span> <span class=\"is-size-7\">Loading ...</span>\n </a>\n </footer>\n <footer class=\"card-footer\" v-else>\n <a class=\"card-footer-item has-text-danger\" @click=\"$emit('close')\">\n <span class=\"icon\"><i class=\"mdi mdi-cancel\"></i></span> <span class=\"is-size-7\">Cancel</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"add_stream\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-background-info has-text-white has-text-weight-bold\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogAddUrlStream',\n props: ['show'],\n\n data () {\n return {\n url: '',\n loading: false\n }\n },\n\n methods: {\n add_stream: function () {\n this.loading = true\n webapi.queue_add(this.url).then(() => {\n this.$emit('close')\n this.url = ''\n }).catch(() => {\n this.loading = false\n })\n },\n\n play: function () {\n this.loading = true\n webapi.player_play_uri(this.url, false).then(() => {\n this.$emit('close')\n this.url = ''\n }).catch(() => {\n this.loading = false\n })\n }\n },\n\n watch: {\n 'show' () {\n if (this.show) {\n this.loading = false\n\n // We need to delay setting the focus to the input field until the field is part of the dom and visible\n setTimeout(() => {\n this.$refs.url_field.focus()\n }, 10)\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogAddUrlStream.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogAddUrlStream.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogAddUrlStream.vue?vue&type=template&id=1c92eee2&\"\nimport script from \"./ModalDialogAddUrlStream.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogAddUrlStream.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\" Save queue to playlist \")]),_c('form',{staticClass:\"fd-has-margin-bottom\",on:{\"submit\":function($event){$event.preventDefault();return _vm.save.apply(null, arguments)}}},[_c('div',{staticClass:\"field\"},[_c('p',{staticClass:\"control is-expanded has-icons-left\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.playlist_name),expression:\"playlist_name\"}],ref:\"playlist_name_field\",staticClass:\"input is-shadowless\",attrs:{\"type\":\"text\",\"placeholder\":\"Playlist name\",\"disabled\":_vm.loading},domProps:{\"value\":(_vm.playlist_name)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.playlist_name=$event.target.value}}}),_c('span',{staticClass:\"icon is-left\"},[_c('i',{staticClass:\"mdi mdi-file-music\"})])])])])]),(_vm.loading)?_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\"},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-web\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Saving ...\")])])]):_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-danger\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-cancel\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Cancel\")])]),_c('a',{staticClass:\"card-footer-item has-background-info has-text-white has-text-weight-bold\",on:{\"click\":_vm.save}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-content-save\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Save\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n Save queue to playlist\n </p>\n <form v-on:submit.prevent=\"save\" class=\"fd-has-margin-bottom\">\n <div class=\"field\">\n <p class=\"control is-expanded has-icons-left\">\n <input class=\"input is-shadowless\" type=\"text\" placeholder=\"Playlist name\" v-model=\"playlist_name\" :disabled=\"loading\" ref=\"playlist_name_field\">\n <span class=\"icon is-left\">\n <i class=\"mdi mdi-file-music\"></i>\n </span>\n </p>\n </div>\n </form>\n </div>\n <footer class=\"card-footer\" v-if=\"loading\">\n <a class=\"card-footer-item has-text-dark\">\n <span class=\"icon\"><i class=\"mdi mdi-web\"></i></span> <span class=\"is-size-7\">Saving ...</span>\n </a>\n </footer>\n <footer class=\"card-footer\" v-else>\n <a class=\"card-footer-item has-text-danger\" @click=\"$emit('close')\">\n <span class=\"icon\"><i class=\"mdi mdi-cancel\"></i></span> <span class=\"is-size-7\">Cancel</span>\n </a>\n <a class=\"card-footer-item has-background-info has-text-white has-text-weight-bold\" @click=\"save\">\n <span class=\"icon\"><i class=\"mdi mdi-content-save\"></i></span> <span class=\"is-size-7\">Save</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogPlaylistSave',\n props: ['show'],\n\n data () {\n return {\n playlist_name: '',\n loading: false\n }\n },\n\n methods: {\n save: function () {\n if (this.playlist_name.length < 1) {\n return\n }\n\n this.loading = true\n webapi.queue_save_playlist(this.playlist_name).then(() => {\n this.$emit('close')\n this.playlist_name = ''\n }).catch(() => {\n this.loading = false\n })\n }\n },\n\n watch: {\n 'show' () {\n if (this.show) {\n this.loading = false\n\n // We need to delay setting the focus to the input field until the field is part of the dom and visible\n setTimeout(() => {\n this.$refs.playlist_name_field.focus()\n }, 10)\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogPlaylistSave.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogPlaylistSave.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogPlaylistSave.vue?vue&type=template&id=5f414a1b&\"\nimport script from \"./ModalDialogPlaylistSave.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogPlaylistSave.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"heading\">{{ queue.count }} tracks</p>\n <p class=\"title is-4\">Queue</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small\" :class=\"{ 'is-info': show_only_next_items }\" @click=\"update_show_next_items\">\n <span class=\"icon\">\n <i class=\"mdi mdi-arrow-collapse-down\"></i>\n </span>\n <span>Hide previous</span>\n </a>\n <a class=\"button is-small\" @click=\"open_add_stream_dialog\">\n <span class=\"icon\">\n <i class=\"mdi mdi-web\"></i>\n </span>\n <span>Add Stream</span>\n </a>\n <a class=\"button is-small\" :class=\"{ 'is-info': edit_mode }\" @click=\"edit_mode = !edit_mode\">\n <span class=\"icon\">\n <i class=\"mdi mdi-pencil\"></i>\n </span>\n <span>Edit</span>\n </a>\n <a class=\"button is-small\" @click=\"queue_clear\">\n <span class=\"icon\">\n <i class=\"mdi mdi-delete-empty\"></i>\n </span>\n <span>Clear</span>\n </a>\n <a class=\"button is-small\" v-if=\"is_queue_save_allowed\" :disabled=\"queue_items.length === 0\" @click=\"save_dialog\">\n <span class=\"icon\">\n <i class=\"mdi mdi-content-save\"></i>\n </span>\n <span>Save</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <draggable v-model=\"queue_items\" handle=\".handle\" @end=\"move_item\">\n <list-item-queue-item v-for=\"(item, index) in queue_items\"\n :key=\"item.id\" :item=\"item\" :position=\"index\"\n :current_position=\"current_position\"\n :show_only_next_items=\"show_only_next_items\"\n :edit_mode=\"edit_mode\">\n <template slot=\"actions\">\n <a @click=\"open_dialog(item)\" v-if=\"!edit_mode\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n <a @click=\"remove(item)\" v-if=\"item.id !== state.item_id && edit_mode\">\n <span class=\"icon has-text-grey\"><i class=\"mdi mdi-delete mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-queue-item>\n </draggable>\n <modal-dialog-queue-item :show=\"show_details_modal\" :item=\"selected_item\" @close=\"show_details_modal = false\" />\n <modal-dialog-add-url-stream :show=\"show_url_modal\" @close=\"show_url_modal = false\" />\n <modal-dialog-playlist-save v-if=\"is_queue_save_allowed\" :show=\"show_pls_save_modal\" @close=\"show_pls_save_modal = false\" />\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListItemQueueItem from '@/components/ListItemQueueItem'\nimport ModalDialogQueueItem from '@/components/ModalDialogQueueItem'\nimport ModalDialogAddUrlStream from '@/components/ModalDialogAddUrlStream'\nimport ModalDialogPlaylistSave from '@/components/ModalDialogPlaylistSave'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\nimport draggable from 'vuedraggable'\n\nexport default {\n name: 'PageQueue',\n components: { ContentWithHeading, ListItemQueueItem, draggable, ModalDialogQueueItem, ModalDialogAddUrlStream, ModalDialogPlaylistSave },\n\n data () {\n return {\n edit_mode: false,\n\n show_details_modal: false,\n show_url_modal: false,\n show_pls_save_modal: false,\n selected_item: {}\n }\n },\n\n computed: {\n state () {\n return this.$store.state.player\n },\n is_queue_save_allowed () {\n return this.$store.state.config.allow_modifying_stored_playlists && this.$store.state.config.default_playlist_directory\n },\n queue () {\n return this.$store.state.queue\n },\n queue_items: {\n get () { return this.$store.state.queue.items },\n set (value) { /* Do nothing? Send move request in @end event */ }\n },\n current_position () {\n const nowPlaying = this.$store.getters.now_playing\n return nowPlaying === undefined || nowPlaying.position === undefined ? -1 : this.$store.getters.now_playing.position\n },\n show_only_next_items () {\n return this.$store.state.show_only_next_items\n }\n },\n\n methods: {\n queue_clear: function () {\n webapi.queue_clear()\n },\n\n update_show_next_items: function (e) {\n this.$store.commit(types.SHOW_ONLY_NEXT_ITEMS, !this.show_only_next_items)\n },\n\n remove: function (item) {\n webapi.queue_remove(item.id)\n },\n\n move_item: function (e) {\n const oldPosition = !this.show_only_next_items ? e.oldIndex : e.oldIndex + this.current_position\n const item = this.queue_items[oldPosition]\n const newPosition = item.position + (e.newIndex - e.oldIndex)\n if (newPosition !== oldPosition) {\n webapi.queue_move(item.id, newPosition)\n }\n },\n\n open_dialog: function (item) {\n this.selected_item = item\n this.show_details_modal = true\n },\n\n open_add_stream_dialog: function (item) {\n this.show_url_modal = true\n },\n\n save_dialog: function (item) {\n if (this.queue_items.length > 0) {\n this.show_pls_save_modal = true\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageQueue.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageQueue.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageQueue.vue?vue&type=template&id=4b30cd46&\"\nimport script from \"./PageQueue.vue?vue&type=script&lang=js&\"\nexport * from \"./PageQueue.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[(_vm.now_playing.id > 0)?_c('div',{staticClass:\"fd-is-fullheight\"},[_c('div',{staticClass:\"fd-is-expanded\"},[_c('cover-artwork',{staticClass:\"fd-cover-image fd-has-action\",attrs:{\"artwork_url\":_vm.now_playing.artwork_url,\"artist\":_vm.now_playing.artist,\"album\":_vm.now_playing.album},on:{\"click\":function($event){return _vm.open_dialog(_vm.now_playing)}}})],1),_c('div',{staticClass:\"fd-has-padding-left-right\"},[_c('div',{staticClass:\"container has-text-centered\"},[_c('p',{staticClass:\"control has-text-centered fd-progress-now-playing\"},[_c('range-slider',{staticClass:\"seek-slider fd-has-action\",attrs:{\"min\":\"0\",\"max\":_vm.state.item_length_ms,\"value\":_vm.item_progress_ms,\"disabled\":_vm.state.state === 'stop',\"step\":\"1000\"},on:{\"change\":_vm.seek}})],1),_c('p',{staticClass:\"content\"},[_c('span',[_vm._v(_vm._s(_vm._f(\"duration\")(_vm.item_progress_ms))+\" / \"+_vm._s(_vm._f(\"duration\")(_vm.now_playing.length_ms)))])])])]),_c('div',{staticClass:\"fd-has-padding-left-right\"},[_c('div',{staticClass:\"container has-text-centered fd-has-margin-top\"},[_c('h1',{staticClass:\"title is-5\"},[_vm._v(\" \"+_vm._s(_vm.now_playing.title)+\" \")]),_c('h2',{staticClass:\"title is-6\"},[_vm._v(\" \"+_vm._s(_vm.now_playing.artist)+\" \")]),(_vm.composer)?_c('h2',{staticClass:\"subtitle is-6 has-text-grey has-text-weight-bold\"},[_vm._v(\" \"+_vm._s(_vm.composer)+\" \")]):_vm._e(),_c('h3',{staticClass:\"subtitle is-6\"},[_vm._v(\" \"+_vm._s(_vm.now_playing.album)+\" \")])])])]):_c('div',{staticClass:\"fd-is-fullheight\"},[_vm._m(0)]),_c('modal-dialog-queue-item',{attrs:{\"show\":_vm.show_details_modal,\"item\":_vm.selected_item},on:{\"close\":function($event){_vm.show_details_modal = false}}})],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"fd-is-expanded fd-has-padding-left-right\",staticStyle:{\"flex-direction\":\"column\"}},[_c('div',{staticClass:\"content has-text-centered\"},[_c('h1',{staticClass:\"title is-5\"},[_vm._v(\" Your play queue is empty \")]),_c('p',[_vm._v(\" Add some tracks by browsing your library \")])])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('figure',[_c('img',{directives:[{name:\"lazyload\",rawName:\"v-lazyload\"}],key:_vm.artwork_url_with_size,attrs:{\"data-src\":_vm.artwork_url_with_size,\"data-err\":_vm.dataURI},on:{\"click\":function($event){return _vm.$emit('click')}}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\n * SVGRenderer taken from https://github.com/bendera/placeholder published under MIT License\n * Copyright (c) 2017 Adam Bender\n * https://github.com/bendera/placeholder/blob/master/LICENSE\n */\nclass SVGRenderer {\n render (data) {\n const svg = '<svg width=\"' + data.width + '\" height=\"' + data.height + '\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ' + data.width + ' ' + data.height + '\" preserveAspectRatio=\"none\">' +\n '<defs>' +\n '<style type=\"text/css\">' +\n ' #holder text {' +\n ' fill: ' + data.textColor + ';' +\n ' font-family: ' + data.fontFamily + ';' +\n ' font-size: ' + data.fontSize + 'px;' +\n ' font-weight: ' + data.fontWeight + ';' +\n ' }' +\n ' </style>' +\n '</defs>' +\n '<g id=\"holder\">' +\n ' <rect width=\"100%\" height=\"100%\" fill=\"' + data.backgroundColor + '\"></rect>' +\n ' <g>' +\n ' <text text-anchor=\"middle\" x=\"50%\" y=\"50%\" dy=\".3em\">' + data.caption + '</text>' +\n ' </g>' +\n '</g>' +\n '</svg>'\n\n return 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(svg)\n }\n}\n\nexport default SVGRenderer\n","<template>\n <figure>\n <img v-lazyload\n :data-src=\"artwork_url_with_size\"\n :data-err=\"dataURI\"\n :key=\"artwork_url_with_size\"\n @click=\"$emit('click')\">\n </figure>\n</template>\n\n<script>\nimport webapi from '@/webapi'\nimport SVGRenderer from '@/lib/SVGRenderer'\nimport stringToColor from 'string-to-color'\n\nexport default {\n name: 'CoverArtwork',\n props: ['artist', 'album', 'artwork_url', 'maxwidth', 'maxheight'],\n\n data () {\n return {\n svg: new SVGRenderer(),\n width: 600,\n height: 600,\n font_family: 'sans-serif',\n font_size: 200,\n font_weight: 600\n }\n },\n\n computed: {\n artwork_url_with_size: function () {\n if (this.maxwidth > 0 && this.maxheight > 0) {\n return webapi.artwork_url_append_size_params(this.artwork_url, this.maxwidth, this.maxheight)\n }\n return webapi.artwork_url_append_size_params(this.artwork_url)\n },\n\n alt_text () {\n return this.artist + ' - ' + this.album\n },\n\n caption () {\n if (this.album) {\n return this.album.substring(0, 2)\n }\n if (this.artist) {\n return this.artist.substring(0, 2)\n }\n return ''\n },\n\n background_color () {\n return stringToColor(this.alt_text)\n },\n\n is_background_light () {\n // Based on https://stackoverflow.com/a/44615197\n const hex = this.background_color.replace(/#/, '')\n const r = parseInt(hex.substr(0, 2), 16)\n const g = parseInt(hex.substr(2, 2), 16)\n const b = parseInt(hex.substr(4, 2), 16)\n\n const luma = [\n 0.299 * r,\n 0.587 * g,\n 0.114 * b\n ].reduce((a, b) => a + b) / 255\n\n return luma > 0.5\n },\n\n text_color () {\n return this.is_background_light ? '#000000' : '#ffffff'\n },\n\n rendererParams () {\n return {\n width: this.width,\n height: this.height,\n textColor: this.text_color,\n backgroundColor: this.background_color,\n caption: this.caption,\n fontFamily: this.font_family,\n fontSize: this.font_size,\n fontWeight: this.font_weight\n }\n },\n\n dataURI () {\n return this.svg.render(this.rendererParams)\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CoverArtwork.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CoverArtwork.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CoverArtwork.vue?vue&type=template&id=377ab7d4&\"\nimport script from \"./CoverArtwork.vue?vue&type=script&lang=js&\"\nexport * from \"./CoverArtwork.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <section>\n <div v-if=\"now_playing.id > 0\" class=\"fd-is-fullheight\">\n <div class=\"fd-is-expanded\">\n <cover-artwork @click=\"open_dialog(now_playing)\"\n :artwork_url=\"now_playing.artwork_url\"\n :artist=\"now_playing.artist\"\n :album=\"now_playing.album\"\n class=\"fd-cover-image fd-has-action\" />\n </div>\n <div class=\"fd-has-padding-left-right\">\n <div class=\"container has-text-centered\">\n <p class=\"control has-text-centered fd-progress-now-playing\">\n <range-slider\n class=\"seek-slider fd-has-action\"\n min=\"0\"\n :max=\"state.item_length_ms\"\n :value=\"item_progress_ms\"\n :disabled=\"state.state === 'stop'\"\n step=\"1000\"\n @change=\"seek\" >\n </range-slider>\n </p>\n <p class=\"content\">\n <span>{{ item_progress_ms | duration }} / {{ now_playing.length_ms | duration }}</span>\n </p>\n </div>\n </div>\n <div class=\"fd-has-padding-left-right\">\n <div class=\"container has-text-centered fd-has-margin-top\">\n <h1 class=\"title is-5\">\n {{ now_playing.title }}\n </h1>\n <h2 class=\"title is-6\">\n {{ now_playing.artist }}\n </h2>\n <h2 class=\"subtitle is-6 has-text-grey has-text-weight-bold\" v-if=\"composer\">\n {{ composer }}\n </h2>\n <h3 class=\"subtitle is-6\">\n {{ now_playing.album }}\n </h3>\n </div>\n </div>\n </div>\n <div v-else class=\"fd-is-fullheight\">\n <div class=\"fd-is-expanded fd-has-padding-left-right\" style=\"flex-direction: column;\">\n <div class=\"content has-text-centered\">\n <h1 class=\"title is-5\">\n Your play queue is empty\n </h1>\n <p>\n Add some tracks by browsing your library\n </p>\n </div>\n </div>\n </div>\n <modal-dialog-queue-item :show=\"show_details_modal\" :item=\"selected_item\" @close=\"show_details_modal = false\" />\n </section>\n</template>\n\n<script>\nimport ModalDialogQueueItem from '@/components/ModalDialogQueueItem'\nimport RangeSlider from 'vue-range-slider'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'PageNowPlaying',\n components: { ModalDialogQueueItem, RangeSlider, CoverArtwork },\n\n data () {\n return {\n item_progress_ms: 0,\n interval_id: 0,\n\n show_details_modal: false,\n selected_item: {}\n }\n },\n\n created () {\n this.item_progress_ms = this.state.item_progress_ms\n webapi.player_status().then(({ data }) => {\n this.$store.commit(types.UPDATE_PLAYER_STATUS, data)\n if (this.state.state === 'play') {\n this.interval_id = window.setInterval(this.tick, 1000)\n }\n })\n },\n\n destroyed () {\n if (this.interval_id > 0) {\n window.clearTimeout(this.interval_id)\n this.interval_id = 0\n }\n },\n\n computed: {\n state () {\n return this.$store.state.player\n },\n\n now_playing () {\n return this.$store.getters.now_playing\n },\n\n settings_option_show_composer_now_playing () {\n return this.$store.getters.settings_option_show_composer_now_playing\n },\n\n settings_option_show_composer_for_genre () {\n return this.$store.getters.settings_option_show_composer_for_genre\n },\n\n composer () {\n if (this.settings_option_show_composer_now_playing) {\n if (!this.settings_option_show_composer_for_genre ||\n (this.now_playing.genre &&\n this.settings_option_show_composer_for_genre.toLowerCase()\n .split(',')\n .findIndex(elem => this.now_playing.genre.toLowerCase().indexOf(elem.trim()) >= 0) >= 0)) {\n return this.now_playing.composer\n }\n }\n return null\n }\n },\n\n methods: {\n tick: function () {\n this.item_progress_ms += 1000\n },\n\n seek: function (newPosition) {\n webapi.player_seek_to_pos(newPosition).catch(() => {\n this.item_progress_ms = this.state.item_progress_ms\n })\n },\n\n open_dialog: function (item) {\n this.selected_item = item\n this.show_details_modal = true\n }\n },\n\n watch: {\n 'state' () {\n if (this.interval_id > 0) {\n window.clearTimeout(this.interval_id)\n this.interval_id = 0\n }\n this.item_progress_ms = this.state.item_progress_ms\n if (this.state.state === 'play') {\n this.interval_id = window.setInterval(this.tick, 1000)\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageNowPlaying.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageNowPlaying.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageNowPlaying.vue?vue&type=template&id=734899dc&\"\nimport script from \"./PageNowPlaying.vue?vue&type=script&lang=js&\"\nexport * from \"./PageNowPlaying.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Recently added\")]),_c('p',{staticClass:\"heading\"},[_vm._v(\"albums\")])]),_c('template',{slot:\"content\"},[_c('list-albums',{attrs:{\"albums\":_vm.recently_added.items}})],1),_c('template',{slot:\"footer\"},[_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":function($event){return _vm.open_browse('recently_added')}}},[_vm._v(\"Show more\")])])])])],2),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Recently played\")]),_c('p',{staticClass:\"heading\"},[_vm._v(\"tracks\")])]),_c('template',{slot:\"content\"},[_c('list-tracks',{attrs:{\"tracks\":_vm.recently_played.items}})],1),_c('template',{slot:\"footer\"},[_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":function($event){return _vm.open_browse('recently_played')}}},[_vm._v(\"Show more\")])])])])],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nexport const LoadDataBeforeEnterMixin = function (dataObject) {\n return {\n beforeRouteEnter (to, from, next) {\n dataObject.load(to).then((response) => {\n next(vm => dataObject.set(vm, response))\n })\n },\n beforeRouteUpdate (to, from, next) {\n const vm = this\n dataObject.load(to).then((response) => {\n dataObject.set(vm, response)\n next()\n })\n }\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"section fd-tabs-section\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('div',{staticClass:\"tabs is-centered is-small\"},[_c('ul',[_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/music/browse\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-web\"})]),_c('span',{},[_vm._v(\"Browse\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/music/artists\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-artist\"})]),_c('span',{},[_vm._v(\"Artists\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/music/albums\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-album\"})]),_c('span',{},[_vm._v(\"Albums\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/music/genres\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-speaker\"})]),_c('span',{},[_vm._v(\"Genres\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/music/composers\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-book-open-page-variant\"})]),_c('span',{},[_vm._v(\"Composers\")])])]),(_vm.spotify_enabled)?_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/music/spotify\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-spotify\"})]),_c('span',{},[_vm._v(\"Spotify\")])])]):_vm._e()],1)])])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section class=\"section fd-tabs-section\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <div class=\"tabs is-centered is-small\">\n <ul>\n <router-link tag=\"li\" to=\"/music/browse\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-web\"></i></span>\n <span class=\"\">Browse</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/music/artists\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-artist\"></i></span>\n <span class=\"\">Artists</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/music/albums\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-album\"></i></span>\n <span class=\"\">Albums</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/music/genres\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-speaker\"></i></span>\n <span class=\"\">Genres</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/music/composers\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-book-open-page-variant\"></i></span>\n <span class=\"\">Composers</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/music/spotify\" v-if=\"spotify_enabled\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-spotify\"></i></span>\n <span class=\"\">Spotify</span>\n </a>\n </router-link>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </section>\n</template>\n\n<script>\nexport default {\n name: 'TabsMusic',\n\n computed: {\n spotify_enabled () {\n return this.$store.state.spotify.webapi_token_valid\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsMusic.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsMusic.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TabsMusic.vue?vue&type=template&id=f64096ae&\"\nimport script from \"./TabsMusic.vue?vue&type=script&lang=js&\"\nexport * from \"./TabsMusic.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.is_grouped)?_c('div',_vm._l((_vm.albums.indexList),function(idx){return _c('div',{key:idx,staticClass:\"mb-6\"},[_c('span',{staticClass:\"tag is-info is-light is-small has-text-weight-bold\",attrs:{\"id\":'index_' + idx}},[_vm._v(_vm._s(idx))]),_vm._l((_vm.albums.grouped[idx]),function(album){return _c('list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[(_vm.is_visible_artwork)?_c('template',{slot:\"artwork\"},[_c('p',{staticClass:\"image is-64x64 fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":album.artwork_url,\"artist\":album.artist,\"album\":album.name,\"maxwidth\":64,\"maxheight\":64}})],1)]):_vm._e(),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(album)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)})],2)}),0):_c('div',_vm._l((_vm.albums_list),function(album){return _c('list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[(_vm.is_visible_artwork)?_c('template',{slot:\"artwork\"},[_c('p',{staticClass:\"image is-64x64 fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":album.artwork_url,\"artist\":album.artist,\"album\":album.name,\"maxwidth\":64,\"maxheight\":64}})],1)]):_vm._e(),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(album)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),1),_c('modal-dialog-album',{attrs:{\"show\":_vm.show_details_modal,\"album\":_vm.selected_album,\"media_kind\":_vm.media_kind},on:{\"remove-podcast\":function($event){return _vm.open_remove_podcast_dialog()},\"play-count-changed\":function($event){return _vm.play_count_changed()},\"close\":function($event){_vm.show_details_modal = false}}}),_c('modal-dialog',{attrs:{\"show\":_vm.show_remove_podcast_modal,\"title\":\"Remove podcast\",\"delete_action\":\"Remove\"},on:{\"close\":function($event){_vm.show_remove_podcast_modal = false},\"delete\":_vm.remove_podcast}},[_c('template',{slot:\"modal-content\"},[_c('p',[_vm._v(\"Permanently remove this podcast from your library?\")]),_c('p',{staticClass:\"is-size-7\"},[_vm._v(\"(This will also remove the RSS playlist \"),_c('b',[_vm._v(_vm._s(_vm.rss_playlist_to_remove.name))]),_vm._v(\".)\")])])],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\",attrs:{\"id\":'index_' + _vm.props.album.name_sort.charAt(0).toUpperCase()}},[(_vm.$slots['artwork'])?_c('div',{staticClass:\"media-left fd-has-action\",on:{\"click\":_vm.listeners.click}},[_vm._t(\"artwork\")],2):_vm._e(),_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.listeners.click}},[_c('div',{staticStyle:{\"margin-top\":\"0.7rem\"}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.props.album.name))]),_c('h2',{staticClass:\"subtitle is-7 has-text-grey\"},[_c('b',[_vm._v(_vm._s(_vm.props.album.artist))])]),(_vm.props.album.date_released && _vm.props.album.media_kind === 'music')?_c('h2',{staticClass:\"subtitle is-7 has-text-grey has-text-weight-normal\"},[_vm._v(\" \"+_vm._s(_vm._f(\"time\")(_vm.props.album.date_released,'L'))+\" \")]):_vm._e()])]),_c('div',{staticClass:\"media-right\",staticStyle:{\"padding-top\":\"0.7rem\"}},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template functional>\n <div class=\"media\" :id=\"'index_' + props.album.name_sort.charAt(0).toUpperCase()\">\n <div class=\"media-left fd-has-action\"\n v-if=\"$slots['artwork']\"\n @click=\"listeners.click\">\n <slot name=\"artwork\"></slot>\n </div>\n <div class=\"media-content fd-has-action is-clipped\" @click=\"listeners.click\">\n <div style=\"margin-top:0.7rem;\">\n <h1 class=\"title is-6\">{{ props.album.name }}</h1>\n <h2 class=\"subtitle is-7 has-text-grey\"><b>{{ props.album.artist }}</b></h2>\n <h2 class=\"subtitle is-7 has-text-grey has-text-weight-normal\"\n v-if=\"props.album.date_released && props.album.media_kind === 'music'\">\n {{ props.album.date_released | time('L') }}\n </h2>\n </div>\n </div>\n <div class=\"media-right\" style=\"padding-top:0.7rem;\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'ListItemAlbum',\n props: ['album', 'media_kind']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemAlbum.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemAlbum.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListItemAlbum.vue?vue&type=template&id=0d4ab83f&functional=true&\"\nimport script from \"./ListItemAlbum.vue?vue&type=script&lang=js&\"\nexport * from \"./ListItemAlbum.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('cover-artwork',{staticClass:\"image is-square fd-has-margin-bottom fd-has-shadow\",attrs:{\"artwork_url\":_vm.album.artwork_url,\"artist\":_vm.album.artist,\"album\":_vm.album.name}}),_c('p',{staticClass:\"title is-4\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_album}},[_vm._v(_vm._s(_vm.album.name))])]),(_vm.media_kind_resolved === 'podcast')?_c('div',{staticClass:\"buttons\"},[_c('a',{staticClass:\"button is-small\",on:{\"click\":_vm.mark_played}},[_vm._v(\"Mark as played\")]),_c('a',{staticClass:\"button is-small\",on:{\"click\":function($event){return _vm.$emit('remove-podcast')}}},[_vm._v(\"Remove podcast\")])]):_vm._e(),_c('div',{staticClass:\"content is-small\"},[(_vm.album.artist)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album artist\")]),_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.album.artist))])]):_vm._e(),(_vm.album.date_released)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Release date\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"time\")(_vm.album.date_released,'L')))])]):(_vm.album.year > 0)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Year\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.album.year))])]):_vm._e(),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Tracks\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.album.track_count))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Length\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"duration\")(_vm.album.length_ms)))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Type\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.album.media_kind)+\" - \"+_vm._s(_vm.album.data_kind))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Added at\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"time\")(_vm.album.time_added,'L LT')))])])])],1),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <cover-artwork\n :artwork_url=\"album.artwork_url\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n class=\"image is-square fd-has-margin-bottom fd-has-shadow\" />\n <p class=\"title is-4\">\n <a class=\"has-text-link\" @click=\"open_album\">{{ album.name }}</a>\n </p>\n <div class=\"buttons\" v-if=\"media_kind_resolved === 'podcast'\">\n <a class=\"button is-small\" @click=\"mark_played\">Mark as played</a>\n <a class=\"button is-small\" @click=\"$emit('remove-podcast')\">Remove podcast</a>\n </div>\n <div class=\"content is-small\">\n <p v-if=\"album.artist\">\n <span class=\"heading\">Album artist</span>\n <a class=\"title is-6 has-text-link\" @click=\"open_artist\">{{ album.artist }}</a>\n </p>\n <p v-if=\"album.date_released\">\n <span class=\"heading\">Release date</span>\n <span class=\"title is-6\">{{ album.date_released | time('L') }}</span>\n </p>\n <p v-else-if=\"album.year > 0\">\n <span class=\"heading\">Year</span>\n <span class=\"title is-6\">{{ album.year }}</span>\n </p>\n <p>\n <span class=\"heading\">Tracks</span>\n <span class=\"title is-6\">{{ album.track_count }}</span>\n </p>\n <p>\n <span class=\"heading\">Length</span>\n <span class=\"title is-6\">{{ album.length_ms | duration }}</span>\n </p>\n <p>\n <span class=\"heading\">Type</span>\n <span class=\"title is-6\">{{ album.media_kind }} - {{ album.data_kind }}</span>\n </p>\n <p>\n <span class=\"heading\">Added at</span>\n <span class=\"title is-6\">{{ album.time_added | time('L LT') }}</span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport CoverArtwork from '@/components/CoverArtwork'\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogAlbum',\n components: { CoverArtwork },\n props: ['show', 'album', 'media_kind', 'new_tracks'],\n\n data () {\n return {\n artwork_visible: false\n }\n },\n\n computed: {\n artwork_url: function () {\n return webapi.artwork_url_append_size_params(this.album.artwork_url)\n },\n\n media_kind_resolved: function () {\n return this.media_kind ? this.media_kind : this.album.media_kind\n }\n },\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_uri(this.album.uri, false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_add(this.album.uri)\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_add_next(this.album.uri)\n },\n\n open_album: function () {\n if (this.media_kind_resolved === 'podcast') {\n this.$router.push({ path: '/podcasts/' + this.album.id })\n } else if (this.media_kind_resolved === 'audiobook') {\n this.$router.push({ path: '/audiobooks/' + this.album.id })\n } else {\n this.$router.push({ path: '/music/albums/' + this.album.id })\n }\n },\n\n open_artist: function () {\n if (this.media_kind_resolved === 'podcast') {\n // No artist page for podcasts\n } else if (this.media_kind_resolved === 'audiobook') {\n this.$router.push({ path: '/audiobooks/artists/' + this.album.artist_id })\n } else {\n this.$router.push({ path: '/music/artists/' + this.album.artist_id })\n }\n },\n\n mark_played: function () {\n webapi.library_album_track_update(this.album.id, { play_count: 'played' }).then(({ data }) => {\n this.$emit('play-count-changed')\n this.$emit('close')\n })\n },\n\n artwork_loaded: function () {\n this.artwork_visible = true\n },\n\n artwork_error: function () {\n this.artwork_visible = false\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogAlbum.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogAlbum.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogAlbum.vue?vue&type=template&id=43881b14&\"\nimport script from \"./ModalDialogAlbum.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogAlbum.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\nexport default class Albums {\n constructor (items, options = { hideSingles: false, hideSpotify: false, sort: 'Name', group: false }) {\n this.items = items\n this.options = options\n this.grouped = {}\n this.sortedAndFiltered = []\n this.indexList = []\n\n this.init()\n }\n\n init () {\n this.createSortedAndFilteredList()\n this.createGroupedList()\n this.createIndexList()\n }\n\n getAlbumIndex (album) {\n if (this.options.sort === 'Recently added') {\n return album.time_added.substring(0, 4)\n } else if (this.options.sort === 'Recently added (browse)') {\n return this.getRecentlyAddedBrowseIndex(album.time_added)\n } else if (this.options.sort === 'Recently released') {\n return album.date_released ? album.date_released.substring(0, 4) : '0000'\n } else if (this.options.sort === 'Release date') {\n return album.date_released ? album.date_released.substring(0, 4) : '0000'\n }\n return album.name_sort.charAt(0).toUpperCase()\n }\n\n getRecentlyAddedBrowseIndex (recentlyAdded) {\n if (!recentlyAdded) {\n return '0000'\n }\n\n const diff = new Date().getTime() - new Date(recentlyAdded).getTime()\n\n if (diff < 86400000) { // 24h\n return 'Today'\n } else if (diff < 604800000) { // 7 days\n return 'Last week'\n } else if (diff < 2592000000) { // 30 days\n return 'Last month'\n }\n return recentlyAdded.substring(0, 4)\n }\n\n isAlbumVisible (album) {\n if (this.options.hideSingles && album.track_count <= 2) {\n return false\n }\n if (this.options.hideSpotify && album.data_kind === 'spotify') {\n return false\n }\n return true\n }\n\n createIndexList () {\n this.indexList = [...new Set(this.sortedAndFiltered\n .map(album => this.getAlbumIndex(album)))]\n }\n\n createSortedAndFilteredList () {\n let albumsSorted = this.items\n if (this.options.hideSingles || this.options.hideSpotify || this.options.hideOther) {\n albumsSorted = albumsSorted.filter(album => this.isAlbumVisible(album))\n }\n if (this.options.sort === 'Recently added' || this.options.sort === 'Recently added (browse)') {\n albumsSorted = [...albumsSorted].sort((a, b) => b.time_added.localeCompare(a.time_added))\n } else if (this.options.sort === 'Recently released') {\n albumsSorted = [...albumsSorted].sort((a, b) => {\n if (!a.date_released) {\n return 1\n }\n if (!b.date_released) {\n return -1\n }\n return b.date_released.localeCompare(a.date_released)\n })\n } else if (this.options.sort === 'Release date') {\n albumsSorted = [...albumsSorted].sort((a, b) => {\n if (!a.date_released) {\n return -1\n }\n if (!b.date_released) {\n return 1\n }\n return a.date_released.localeCompare(b.date_released)\n })\n }\n this.sortedAndFiltered = albumsSorted\n }\n\n createGroupedList () {\n if (!this.options.group) {\n this.grouped = {}\n }\n this.grouped = this.sortedAndFiltered.reduce((r, album) => {\n const idx = this.getAlbumIndex(album)\n r[idx] = [...r[idx] || [], album]\n return r\n }, {})\n }\n}\n","<template>\n <div>\n <div v-if=\"is_grouped\">\n <div v-for=\"idx in albums.indexList\" :key=\"idx\" class=\"mb-6\">\n <span class=\"tag is-info is-light is-small has-text-weight-bold\" :id=\"'index_' + idx\">{{ idx }}</span>\n <list-item-album v-for=\"album in albums.grouped[idx]\"\n :key=\"album.id\"\n :album=\"album\"\n @click=\"open_album(album)\">\n <template slot=\"artwork\" v-if=\"is_visible_artwork\">\n <p class=\"image is-64x64 fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"album.artwork_url\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n :maxwidth=\"64\"\n :maxheight=\"64\" />\n </p>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_dialog(album)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-album>\n </div>\n </div>\n <div v-else>\n <list-item-album v-for=\"album in albums_list\"\n :key=\"album.id\"\n :album=\"album\"\n @click=\"open_album(album)\">\n <template slot=\"artwork\" v-if=\"is_visible_artwork\">\n <p class=\"image is-64x64 fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"album.artwork_url\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n :maxwidth=\"64\"\n :maxheight=\"64\" />\n </p>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_dialog(album)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-album>\n </div>\n <modal-dialog-album\n :show=\"show_details_modal\"\n :album=\"selected_album\"\n :media_kind=\"media_kind\"\n @remove-podcast=\"open_remove_podcast_dialog()\"\n @play-count-changed=\"play_count_changed()\"\n @close=\"show_details_modal = false\" />\n <modal-dialog\n :show=\"show_remove_podcast_modal\"\n title=\"Remove podcast\"\n delete_action=\"Remove\"\n @close=\"show_remove_podcast_modal = false\"\n @delete=\"remove_podcast\">\n <template slot=\"modal-content\">\n <p>Permanently remove this podcast from your library?</p>\n <p class=\"is-size-7\">(This will also remove the RSS playlist <b>{{ rss_playlist_to_remove.name }}</b>.)</p>\n </template>\n </modal-dialog>\n </div>\n</template>\n\n<script>\nimport ListItemAlbum from '@/components/ListItemAlbum'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\nimport ModalDialog from '@/components/ModalDialog'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport webapi from '@/webapi'\nimport Albums from '@/lib/Albums'\n\nexport default {\n name: 'ListAlbums',\n components: { ListItemAlbum, ModalDialogAlbum, ModalDialog, CoverArtwork },\n\n props: ['albums', 'media_kind'],\n\n data () {\n return {\n show_details_modal: false,\n selected_album: {},\n\n show_remove_podcast_modal: false,\n rss_playlist_to_remove: {}\n }\n },\n\n computed: {\n is_visible_artwork () {\n return this.$store.getters.settings_option('webinterface', 'show_cover_artwork_in_album_lists').value\n },\n\n media_kind_resolved: function () {\n return this.media_kind ? this.media_kind : this.selected_album.media_kind\n },\n\n albums_list: function () {\n if (Array.isArray(this.albums)) {\n return this.albums\n }\n return this.albums.sortedAndFiltered\n },\n\n is_grouped: function () {\n return (this.albums instanceof Albums && this.albums.options.group)\n }\n },\n\n methods: {\n open_album: function (album) {\n this.selected_album = album\n if (this.media_kind_resolved === 'podcast') {\n this.$router.push({ path: '/podcasts/' + album.id })\n } else if (this.media_kind_resolved === 'audiobook') {\n this.$router.push({ path: '/audiobooks/' + album.id })\n } else {\n this.$router.push({ path: '/music/albums/' + album.id })\n }\n },\n\n open_dialog: function (album) {\n this.selected_album = album\n this.show_details_modal = true\n },\n\n open_remove_podcast_dialog: function () {\n webapi.library_album_tracks(this.selected_album.id, { limit: 1 }).then(({ data }) => {\n webapi.library_track_playlists(data.items[0].id).then(({ data }) => {\n const rssPlaylists = data.items.filter(pl => pl.type === 'rss')\n if (rssPlaylists.length !== 1) {\n this.$store.dispatch('add_notification', { text: 'Podcast cannot be removed. Probably it was not added as an RSS playlist.', type: 'danger' })\n return\n }\n\n this.rss_playlist_to_remove = rssPlaylists[0]\n this.show_remove_podcast_modal = true\n this.show_details_modal = false\n })\n })\n },\n\n play_count_changed: function () {\n this.$emit('play-count-changed')\n },\n\n remove_podcast: function () {\n this.show_remove_podcast_modal = false\n webapi.library_playlist_delete(this.rss_playlist_to_remove.id).then(() => {\n this.$emit('podcast-deleted')\n })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListAlbums.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListAlbums.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListAlbums.vue?vue&type=template&id=15409a8d&\"\nimport script from \"./ListAlbums.vue?vue&type=script&lang=js&\"\nexport * from \"./ListAlbums.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._l((_vm.tracks),function(track,index){return _c('list-item-track',{key:track.id,attrs:{\"track\":track},on:{\"click\":function($event){return _vm.play_track(index, track)}}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(track)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('modal-dialog-track',{attrs:{\"show\":_vm.show_details_modal,\"track\":_vm.selected_track},on:{\"close\":function($event){_vm.show_details_modal = false}}})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\",class:{ 'with-progress': _vm.slots().progress },attrs:{\"id\":'index_' + _vm.props.track.title_sort.charAt(0).toUpperCase()}},[(_vm.slots().icon)?_c('figure',{staticClass:\"media-left fd-has-action\",on:{\"click\":_vm.listeners.click}},[_vm._t(\"icon\")],2):_vm._e(),_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.listeners.click}},[_c('h1',{staticClass:\"title is-6\",class:{ 'has-text-grey': _vm.props.track.media_kind === 'podcast' && _vm.props.track.play_count > 0 }},[_vm._v(_vm._s(_vm.props.track.title))]),_c('h2',{staticClass:\"subtitle is-7 has-text-grey\"},[_c('b',[_vm._v(_vm._s(_vm.props.track.artist))])]),_c('h2',{staticClass:\"subtitle is-7 has-text-grey\"},[_vm._v(_vm._s(_vm.props.track.album))]),_vm._t(\"progress\")],2),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template functional>\n <div class=\"media\" :id=\"'index_' + props.track.title_sort.charAt(0).toUpperCase()\" :class=\"{ 'with-progress': slots().progress }\">\n <figure class=\"media-left fd-has-action\" v-if=\"slots().icon\" @click=\"listeners.click\">\n <slot name=\"icon\"></slot>\n </figure>\n <div class=\"media-content fd-has-action is-clipped\" @click=\"listeners.click\">\n <h1 class=\"title is-6\" :class=\"{ 'has-text-grey': props.track.media_kind === 'podcast' && props.track.play_count > 0 }\">{{ props.track.title }}</h1>\n <h2 class=\"subtitle is-7 has-text-grey\"><b>{{ props.track.artist }}</b></h2>\n <h2 class=\"subtitle is-7 has-text-grey\">{{ props.track.album }}</h2>\n <slot name=\"progress\"></slot>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'ListItemTrack',\n props: ['track']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemTrack.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemTrack.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListItemTrack.vue?vue&type=template&id=b15cd80c&functional=true&\"\nimport script from \"./ListItemTrack.vue?vue&type=script&lang=js&\"\nexport * from \"./ListItemTrack.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\" \"+_vm._s(_vm.track.title)+\" \")]),_c('p',{staticClass:\"subtitle\"},[_vm._v(\" \"+_vm._s(_vm.track.artist)+\" \")]),(_vm.track.media_kind === 'podcast')?_c('div',{staticClass:\"buttons\"},[(_vm.track.play_count > 0)?_c('a',{staticClass:\"button is-small\",on:{\"click\":_vm.mark_new}},[_vm._v(\"Mark as new\")]):_vm._e(),(_vm.track.play_count === 0)?_c('a',{staticClass:\"button is-small\",on:{\"click\":_vm.mark_played}},[_vm._v(\"Mark as played\")]):_vm._e()]):_vm._e(),_c('div',{staticClass:\"content is-small\"},[_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album\")]),_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_album}},[_vm._v(_vm._s(_vm.track.album))])]),(_vm.track.album_artist && _vm.track.media_kind !== 'audiobook')?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album artist\")]),_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.track.album_artist))])]):_vm._e(),(_vm.track.composer)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Composer\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.track.composer))])]):_vm._e(),(_vm.track.date_released)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Release date\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"time\")(_vm.track.date_released,'L')))])]):(_vm.track.year > 0)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Year\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.track.year))])]):_vm._e(),(_vm.track.genre)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Genre\")]),_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_genre}},[_vm._v(_vm._s(_vm.track.genre))])]):_vm._e(),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Track / Disc\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.track.track_number)+\" / \"+_vm._s(_vm.track.disc_number))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Length\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"duration\")(_vm.track.length_ms)))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Path\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.track.path))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Type\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.track.media_kind)+\" - \"+_vm._s(_vm.track.data_kind)+\" \"),(_vm.track.data_kind === 'spotify')?_c('span',{staticClass:\"has-text-weight-normal\"},[_vm._v(\"(\"),_c('a',{on:{\"click\":_vm.open_spotify_artist}},[_vm._v(\"artist\")]),_vm._v(\", \"),_c('a',{on:{\"click\":_vm.open_spotify_album}},[_vm._v(\"album\")]),_vm._v(\")\")]):_vm._e()])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Quality\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(\" \"+_vm._s(_vm.track.type)+\" \"),(_vm.track.samplerate)?_c('span',[_vm._v(\" | \"+_vm._s(_vm.track.samplerate)+\" Hz\")]):_vm._e(),(_vm.track.channels)?_c('span',[_vm._v(\" | \"+_vm._s(_vm._f(\"channels\")(_vm.track.channels)))]):_vm._e(),(_vm.track.bitrate)?_c('span',[_vm._v(\" | \"+_vm._s(_vm.track.bitrate)+\" Kb/s\")]):_vm._e()])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Added at\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"time\")(_vm.track.time_added,'L LT')))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Rating\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(Math.floor(_vm.track.rating / 10))+\" / 10\")])]),(_vm.track.comment)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Comment\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.track.comment))])]):_vm._e()])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play_track}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n {{ track.title }}\n </p>\n <p class=\"subtitle\">\n {{ track.artist }}\n </p>\n <div class=\"buttons\" v-if=\"track.media_kind === 'podcast'\">\n <a class=\"button is-small\" v-if=\"track.play_count > 0\" @click=\"mark_new\">Mark as new</a>\n <a class=\"button is-small\" v-if=\"track.play_count === 0\" @click=\"mark_played\">Mark as played</a>\n </div>\n <div class=\"content is-small\">\n <p>\n <span class=\"heading\">Album</span>\n <a class=\"title is-6 has-text-link\" @click=\"open_album\">{{ track.album }}</a>\n </p>\n <p v-if=\"track.album_artist && track.media_kind !== 'audiobook'\">\n <span class=\"heading\">Album artist</span>\n <a class=\"title is-6 has-text-link\" @click=\"open_artist\">{{ track.album_artist }}</a>\n </p>\n <p v-if=\"track.composer\">\n <span class=\"heading\">Composer</span>\n <span class=\"title is-6\">{{ track.composer }}</span>\n </p>\n <p v-if=\"track.date_released\">\n <span class=\"heading\">Release date</span>\n <span class=\"title is-6\">{{ track.date_released | time('L') }}</span>\n </p>\n <p v-else-if=\"track.year > 0\">\n <span class=\"heading\">Year</span>\n <span class=\"title is-6\">{{ track.year }}</span>\n </p>\n <p v-if=\"track.genre\">\n <span class=\"heading\">Genre</span>\n <a class=\"title is-6 has-text-link\" @click=\"open_genre\">{{ track.genre }}</a>\n </p>\n <p>\n <span class=\"heading\">Track / Disc</span>\n <span class=\"title is-6\">{{ track.track_number }} / {{ track.disc_number }}</span>\n </p>\n <p>\n <span class=\"heading\">Length</span>\n <span class=\"title is-6\">{{ track.length_ms | duration }}</span>\n </p>\n <p>\n <span class=\"heading\">Path</span>\n <span class=\"title is-6\">{{ track.path }}</span>\n </p>\n <p>\n <span class=\"heading\">Type</span>\n <span class=\"title is-6\">{{ track.media_kind }} - {{ track.data_kind }} <span class=\"has-text-weight-normal\" v-if=\"track.data_kind === 'spotify'\">(<a @click=\"open_spotify_artist\">artist</a>, <a @click=\"open_spotify_album\">album</a>)</span></span>\n </p>\n <p>\n <span class=\"heading\">Quality</span>\n <span class=\"title is-6\">\n {{ track.type }}\n <span v-if=\"track.samplerate\"> | {{ track.samplerate }} Hz</span>\n <span v-if=\"track.channels\"> | {{ track.channels | channels }}</span>\n <span v-if=\"track.bitrate\"> | {{ track.bitrate }} Kb/s</span>\n </span>\n </p>\n <p>\n <span class=\"heading\">Added at</span>\n <span class=\"title is-6\">{{ track.time_added | time('L LT') }}</span>\n </p>\n <p>\n <span class=\"heading\">Rating</span>\n <span class=\"title is-6\">{{ Math.floor(track.rating / 10) }} / 10</span>\n </p>\n <p v-if=\"track.comment\">\n <span class=\"heading\">Comment</span>\n <span class=\"title is-6\">{{ track.comment }}</span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play_track\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\nimport SpotifyWebApi from 'spotify-web-api-js'\n\nexport default {\n name: 'ModalDialogTrack',\n\n props: ['show', 'track'],\n\n data () {\n return {\n spotify_track: {}\n }\n },\n\n methods: {\n play_track: function () {\n this.$emit('close')\n webapi.player_play_uri(this.track.uri, false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_add(this.track.uri)\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_add_next(this.track.uri)\n },\n\n open_album: function () {\n this.$emit('close')\n if (this.track.media_kind === 'podcast') {\n this.$router.push({ path: '/podcasts/' + this.track.album_id })\n } else if (this.track.media_kind === 'audiobook') {\n this.$router.push({ path: '/audiobooks/' + this.track.album_id })\n } else {\n this.$router.push({ path: '/music/albums/' + this.track.album_id })\n }\n },\n\n open_artist: function () {\n this.$emit('close')\n this.$router.push({ path: '/music/artists/' + this.track.album_artist_id })\n },\n\n open_genre: function () {\n this.$router.push({ name: 'Genre', params: { genre: this.track.genre } })\n },\n\n open_spotify_artist: function () {\n this.$emit('close')\n this.$router.push({ path: '/music/spotify/artists/' + this.spotify_track.artists[0].id })\n },\n\n open_spotify_album: function () {\n this.$emit('close')\n this.$router.push({ path: '/music/spotify/albums/' + this.spotify_track.album.id })\n },\n\n mark_new: function () {\n webapi.library_track_update(this.track.id, { play_count: 'reset' }).then(() => {\n this.$emit('play-count-changed')\n this.$emit('close')\n })\n },\n\n mark_played: function () {\n webapi.library_track_update(this.track.id, { play_count: 'increment' }).then(() => {\n this.$emit('play-count-changed')\n this.$emit('close')\n })\n }\n },\n\n watch: {\n 'track' () {\n if (this.track && this.track.data_kind === 'spotify') {\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(this.$store.state.spotify.webapi_token)\n spotifyApi.getTrack(this.track.path.slice(this.track.path.lastIndexOf(':') + 1)).then((response) => {\n this.spotify_track = response\n })\n } else {\n this.spotify_track = {}\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogTrack.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogTrack.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogTrack.vue?vue&type=template&id=3319b9a1&\"\nimport script from \"./ModalDialogTrack.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogTrack.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <list-item-track v-for=\"(track, index) in tracks\" :key=\"track.id\" :track=\"track\" @click=\"play_track(index, track)\">\n <template slot=\"actions\">\n <a @click=\"open_dialog(track)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-track>\n <modal-dialog-track :show=\"show_details_modal\" :track=\"selected_track\" @close=\"show_details_modal = false\" />\n </div>\n</template>\n\n<script>\nimport ListItemTrack from '@/components/ListItemTrack'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ListTracks',\n components: { ListItemTrack, ModalDialogTrack },\n\n props: ['tracks', 'uris', 'expression'],\n\n data () {\n return {\n show_details_modal: false,\n selected_track: {}\n }\n },\n\n methods: {\n play_track: function (position, track) {\n if (this.uris) {\n webapi.player_play_uri(this.uris, false, position)\n } else if (this.expression) {\n webapi.player_play_expression(this.expression, false, position)\n } else {\n webapi.player_play_uri(track.uri, false)\n }\n },\n\n open_dialog: function (track) {\n this.selected_track = track\n this.show_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListTracks.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListTracks.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListTracks.vue?vue&type=template&id=39565e8c&\"\nimport script from \"./ListTracks.vue?vue&type=script&lang=js&\"\nexport * from \"./ListTracks.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <tabs-music></tabs-music>\n\n <!-- Recently added -->\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Recently added</p>\n <p class=\"heading\">albums</p>\n </template>\n <template slot=\"content\">\n <list-albums :albums=\"recently_added.items\"></list-albums>\n </template>\n <template slot=\"footer\">\n <nav class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_browse('recently_added')\">Show more</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n\n <!-- Recently played -->\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Recently played</p>\n <p class=\"heading\">tracks</p>\n </template>\n <template slot=\"content\">\n <list-tracks :tracks=\"recently_played.items\"></list-tracks>\n </template>\n <template slot=\"footer\">\n <nav class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_browse('recently_played')\">Show more</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport ListAlbums from '@/components/ListAlbums'\nimport ListTracks from '@/components/ListTracks'\nimport webapi from '@/webapi'\n\nconst browseData = {\n load: function (to) {\n return Promise.all([\n webapi.search({ type: 'album', expression: 'time_added after 8 weeks ago and media_kind is music having track_count > 3 order by time_added desc', limit: 3 }),\n webapi.search({ type: 'track', expression: 'time_played after 8 weeks ago and media_kind is music order by time_played desc', limit: 3 })\n ])\n },\n\n set: function (vm, response) {\n vm.recently_added = response[0].data.albums\n vm.recently_played = response[1].data.tracks\n }\n}\n\nexport default {\n name: 'PageBrowse',\n mixins: [LoadDataBeforeEnterMixin(browseData)],\n components: { ContentWithHeading, TabsMusic, ListAlbums, ListTracks },\n\n data () {\n return {\n recently_added: { items: [] },\n recently_played: { items: [] },\n\n show_track_details_modal: false,\n selected_track: {}\n }\n },\n\n methods: {\n open_browse: function (type) {\n this.$router.push({ path: '/music/browse/' + type })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageBrowse.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageBrowse.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageBrowse.vue?vue&type=template&id=377ad592&\"\nimport script from \"./PageBrowse.vue?vue&type=script&lang=js&\"\nexport * from \"./PageBrowse.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Recently added\")]),_c('p',{staticClass:\"heading\"},[_vm._v(\"albums\")])]),_c('template',{slot:\"content\"},[_c('list-albums',{attrs:{\"albums\":_vm.albums_list}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-music></tabs-music>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Recently added</p>\n <p class=\"heading\">albums</p>\n </template>\n <template slot=\"content\">\n <list-albums :albums=\"albums_list\"></list-albums>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport ListAlbums from '@/components/ListAlbums'\nimport webapi from '@/webapi'\nimport store from '@/store'\nimport Albums from '@/lib/Albums'\n\nconst browseData = {\n load: function (to) {\n const limit = store.getters.settings_option_recently_added_limit\n return webapi.search({\n type: 'album',\n expression: 'media_kind is music having track_count > 3 order by time_added desc',\n limit: limit\n })\n },\n\n set: function (vm, response) {\n vm.recently_added = response.data.albums\n }\n}\n\nexport default {\n name: 'PageBrowseType',\n mixins: [LoadDataBeforeEnterMixin(browseData)],\n components: { ContentWithHeading, TabsMusic, ListAlbums },\n\n data () {\n return {\n recently_added: { items: [] }\n }\n },\n\n computed: {\n albums_list () {\n return new Albums(this.recently_added.items, {\n hideSingles: false,\n hideSpotify: false,\n sort: 'Recently added (browse)',\n group: true\n })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageBrowseRecentlyAdded.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageBrowseRecentlyAdded.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageBrowseRecentlyAdded.vue?vue&type=template&id=669b1b24&\"\nimport script from \"./PageBrowseRecentlyAdded.vue?vue&type=script&lang=js&\"\nexport * from \"./PageBrowseRecentlyAdded.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Recently played\")]),_c('p',{staticClass:\"heading\"},[_vm._v(\"tracks\")])]),_c('template',{slot:\"content\"},[_c('list-tracks',{attrs:{\"tracks\":_vm.recently_played.items}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-music></tabs-music>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Recently played</p>\n <p class=\"heading\">tracks</p>\n </template>\n <template slot=\"content\">\n <list-tracks :tracks=\"recently_played.items\"></list-tracks>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport ListTracks from '@/components/ListTracks'\nimport webapi from '@/webapi'\n\nconst browseData = {\n load: function (to) {\n return webapi.search({\n type: 'track',\n expression: 'time_played after 8 weeks ago and media_kind is music order by time_played desc',\n limit: 50\n })\n },\n\n set: function (vm, response) {\n vm.recently_played = response.data.tracks\n }\n}\n\nexport default {\n name: 'PageBrowseType',\n mixins: [LoadDataBeforeEnterMixin(browseData)],\n components: { ContentWithHeading, TabsMusic, ListTracks },\n\n data () {\n return {\n recently_played: {}\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageBrowseRecentlyPlayed.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageBrowseRecentlyPlayed.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageBrowseRecentlyPlayed.vue?vue&type=template&id=6755b6f8&\"\nimport script from \"./PageBrowseRecentlyPlayed.vue?vue&type=script&lang=js&\"\nexport * from \"./PageBrowseRecentlyPlayed.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.artists_list.indexList}}),_c('div',{staticClass:\"columns\"},[_c('div',{staticClass:\"column\"},[_c('p',{staticClass:\"heading\",staticStyle:{\"margin-bottom\":\"24px\"}},[_vm._v(\"Filter\")]),_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.hide_singles),expression:\"hide_singles\"}],staticClass:\"switch\",attrs:{\"id\":\"switchHideSingles\",\"type\":\"checkbox\",\"name\":\"switchHideSingles\"},domProps:{\"checked\":Array.isArray(_vm.hide_singles)?_vm._i(_vm.hide_singles,null)>-1:(_vm.hide_singles)},on:{\"change\":function($event){var $$a=_vm.hide_singles,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.hide_singles=$$a.concat([$$v]))}else{$$i>-1&&(_vm.hide_singles=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.hide_singles=$$c}}}}),_c('label',{attrs:{\"for\":\"switchHideSingles\"}},[_vm._v(\"Hide singles\")])]),_c('p',{staticClass:\"help\"},[_vm._v(\"If active, hides artists that only appear on singles or playlists.\")])]),(_vm.spotify_enabled)?_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.hide_spotify),expression:\"hide_spotify\"}],staticClass:\"switch\",attrs:{\"id\":\"switchHideSpotify\",\"type\":\"checkbox\",\"name\":\"switchHideSpotify\"},domProps:{\"checked\":Array.isArray(_vm.hide_spotify)?_vm._i(_vm.hide_spotify,null)>-1:(_vm.hide_spotify)},on:{\"change\":function($event){var $$a=_vm.hide_spotify,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.hide_spotify=$$a.concat([$$v]))}else{$$i>-1&&(_vm.hide_spotify=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.hide_spotify=$$c}}}}),_c('label',{attrs:{\"for\":\"switchHideSpotify\"}},[_vm._v(\"Hide artists from Spotify\")])]),_c('p',{staticClass:\"help\"},[_vm._v(\"If active, hides artists that only appear in your Spotify library.\")])]):_vm._e()]),_c('div',{staticClass:\"column\"},[_c('p',{staticClass:\"heading\",staticStyle:{\"margin-bottom\":\"24px\"}},[_vm._v(\"Sort by\")]),_c('dropdown-menu',{attrs:{\"options\":_vm.sort_options},model:{value:(_vm.sort),callback:function ($$v) {_vm.sort=$$v},expression:\"sort\"}})],1)])],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Artists\")]),_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.artists_list.sortedAndFiltered.length)+\" Artists\")])]),_c('template',{slot:\"heading-right\"}),_c('template',{slot:\"content\"},[_c('list-artists',{attrs:{\"artists\":_vm.artists_list}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('nav',{staticClass:\"buttons is-centered fd-is-square\",staticStyle:{\"margin-bottom\":\"16px\"}},_vm._l((_vm.filtered_index),function(char){return _c('a',{key:char,staticClass:\"button is-small\",on:{\"click\":function($event){return _vm.nav(char)}}},[_vm._v(_vm._s(char))])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section>\n <nav class=\"buttons is-centered fd-is-square\" style=\"margin-bottom: 16px;\">\n <a v-for=\"char in filtered_index\" :key=\"char\" class=\"button is-small\" @click=\"nav(char)\">{{ char }}</a>\n </nav>\n </section>\n</template>\n\n<script>\nexport default {\n name: 'IndexButtonList',\n\n props: ['index'],\n\n computed: {\n filtered_index () {\n const specialChars = '!\"#$%&\\'()*+,-./:;<=>?@[\\\\]^`{|}~'\n return this.index.filter(c => !specialChars.includes(c))\n }\n },\n\n methods: {\n nav: function (id) {\n this.$router.push({ path: this.$router.currentRoute.path + '#index_' + id })\n },\n\n scroll_to_top: function () {\n window.scrollTo({ top: 0, behavior: 'smooth' })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IndexButtonList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IndexButtonList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./IndexButtonList.vue?vue&type=template&id=4b37eeb5&\"\nimport script from \"./IndexButtonList.vue?vue&type=script&lang=js&\"\nexport * from \"./IndexButtonList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.is_grouped)?_c('div',_vm._l((_vm.artists.indexList),function(idx){return _c('div',{key:idx,staticClass:\"mb-6\"},[_c('span',{staticClass:\"tag is-info is-light is-small has-text-weight-bold\",attrs:{\"id\":'index_' + idx}},[_vm._v(_vm._s(idx))]),_vm._l((_vm.artists.grouped[idx]),function(artist){return _c('list-item-artist',{key:artist.id,attrs:{\"artist\":artist},on:{\"click\":function($event){return _vm.open_artist(artist)}}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(artist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)})],2)}),0):_c('div',_vm._l((_vm.artists_list),function(artist){return _c('list-item-artist',{key:artist.id,attrs:{\"artist\":artist},on:{\"click\":function($event){return _vm.open_artist(artist)}}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(artist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),1),_c('modal-dialog-artist',{attrs:{\"show\":_vm.show_details_modal,\"artist\":_vm.selected_artist,\"media_kind\":_vm.media_kind},on:{\"close\":function($event){_vm.show_details_modal = false}}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\"},[_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.listeners.click}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.props.artist.name))])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template functional>\n <div class=\"media\">\n <div class=\"media-content fd-has-action is-clipped\" @click=\"listeners.click\">\n <h1 class=\"title is-6\">{{ props.artist.name }}</h1>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'ListItemArtist',\n props: ['artist']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemArtist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemArtist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListItemArtist.vue?vue&type=template&id=6f373e4f&functional=true&\"\nimport script from \"./ListItemArtist.vue?vue&type=script&lang=js&\"\nexport * from \"./ListItemArtist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.artist.name))])]),_c('div',{staticClass:\"content is-small\"},[_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Albums\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.artist.album_count))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Tracks\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.artist.track_count))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Type\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.artist.data_kind))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Added at\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"time\")(_vm.artist.time_added,'L LT')))])])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n <a class=\"has-text-link\" @click=\"open_artist\">{{ artist.name }}</a>\n </p>\n <div class=\"content is-small\">\n <p>\n <span class=\"heading\">Albums</span>\n <span class=\"title is-6\">{{ artist.album_count }}</span>\n </p>\n <p>\n <span class=\"heading\">Tracks</span>\n <span class=\"title is-6\">{{ artist.track_count }}</span>\n </p>\n <p>\n <span class=\"heading\">Type</span>\n <span class=\"title is-6\">{{ artist.data_kind }}</span>\n </p>\n <p>\n <span class=\"heading\">Added at</span>\n <span class=\"title is-6\">{{ artist.time_added | time('L LT') }}</span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogArtist',\n props: ['show', 'artist'],\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_uri(this.artist.uri, false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_add(this.artist.uri)\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_add_next(this.artist.uri)\n },\n\n open_artist: function () {\n this.$emit('close')\n this.$router.push({ path: '/music/artists/' + this.artist.id })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogArtist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogArtist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogArtist.vue?vue&type=template&id=c563adce&\"\nimport script from \"./ModalDialogArtist.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogArtist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\nexport default class Artists {\n constructor (items, options = { hideSingles: false, hideSpotify: false, sort: 'Name', group: false }) {\n this.items = items\n this.options = options\n this.grouped = {}\n this.sortedAndFiltered = []\n this.indexList = []\n\n this.init()\n }\n\n init () {\n this.createSortedAndFilteredList()\n this.createGroupedList()\n this.createIndexList()\n }\n\n getArtistIndex (artist) {\n if (this.options.sort === 'Name') {\n return artist.name_sort.charAt(0).toUpperCase()\n }\n return artist.time_added.substring(0, 4)\n }\n\n isArtistVisible (artist) {\n if (this.options.hideSingles && artist.track_count <= (artist.album_count * 2)) {\n return false\n }\n if (this.options.hideSpotify && artist.data_kind === 'spotify') {\n return false\n }\n return true\n }\n\n createIndexList () {\n this.indexList = [...new Set(this.sortedAndFiltered\n .map(artist => this.getArtistIndex(artist)))]\n }\n\n createSortedAndFilteredList () {\n let artistsSorted = this.items\n if (this.options.hideSingles || this.options.hideSpotify || this.options.hideOther) {\n artistsSorted = artistsSorted.filter(artist => this.isArtistVisible(artist))\n }\n if (this.options.sort === 'Recently added') {\n artistsSorted = [...artistsSorted].sort((a, b) => b.time_added.localeCompare(a.time_added))\n }\n this.sortedAndFiltered = artistsSorted\n }\n\n createGroupedList () {\n if (!this.options.group) {\n this.grouped = {}\n }\n this.grouped = this.sortedAndFiltered.reduce((r, artist) => {\n const idx = this.getArtistIndex(artist)\n r[idx] = [...r[idx] || [], artist]\n return r\n }, {})\n }\n}\n","<template>\n <div>\n <div v-if=\"is_grouped\">\n <div v-for=\"idx in artists.indexList\" :key=\"idx\" class=\"mb-6\">\n <span class=\"tag is-info is-light is-small has-text-weight-bold\" :id=\"'index_' + idx\">{{ idx }}</span>\n <list-item-artist v-for=\"artist in artists.grouped[idx]\"\n :key=\"artist.id\"\n :artist=\"artist\"\n @click=\"open_artist(artist)\">\n <template slot=\"actions\">\n <a @click=\"open_dialog(artist)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-artist>\n </div>\n </div>\n <div v-else>\n <list-item-artist v-for=\"artist in artists_list\"\n :key=\"artist.id\"\n :artist=\"artist\"\n @click=\"open_artist(artist)\">\n <template slot=\"actions\">\n <a @click=\"open_dialog(artist)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-artist>\n </div>\n <modal-dialog-artist :show=\"show_details_modal\" :artist=\"selected_artist\" :media_kind=\"media_kind\" @close=\"show_details_modal = false\" />\n </div>\n</template>\n\n<script>\nimport ListItemArtist from '@/components/ListItemArtist'\nimport ModalDialogArtist from '@/components/ModalDialogArtist'\nimport Artists from '@/lib/Artists'\n\nexport default {\n name: 'ListArtists',\n components: { ListItemArtist, ModalDialogArtist },\n\n props: ['artists', 'media_kind'],\n\n data () {\n return {\n show_details_modal: false,\n selected_artist: {}\n }\n },\n\n computed: {\n media_kind_resolved: function () {\n return this.media_kind ? this.media_kind : this.selected_artist.media_kind\n },\n\n artists_list: function () {\n if (Array.isArray(this.artists)) {\n return this.artists\n }\n return this.artists.sortedAndFiltered\n },\n\n is_grouped: function () {\n return (this.artists instanceof Artists && this.artists.options.group)\n }\n },\n\n methods: {\n open_artist: function (artist) {\n this.selected_artist = artist\n if (this.media_kind_resolved === 'podcast') {\n // No artist page for podcasts\n } else if (this.media_kind_resolved === 'audiobook') {\n this.$router.push({ path: '/audiobooks/artists/' + artist.id })\n } else {\n this.$router.push({ path: '/music/artists/' + artist.id })\n }\n },\n\n open_dialog: function (artist) {\n this.selected_artist = artist\n this.show_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListArtists.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListArtists.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListArtists.vue?vue&type=template&id=a9a21416&\"\nimport script from \"./ListArtists.vue?vue&type=script&lang=js&\"\nexport * from \"./ListArtists.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.onClickOutside),expression:\"onClickOutside\"}],staticClass:\"dropdown\",class:{ 'is-active': _vm.is_active }},[_c('div',{staticClass:\"dropdown-trigger\"},[_c('button',{staticClass:\"button\",attrs:{\"aria-haspopup\":\"true\",\"aria-controls\":\"dropdown-menu\"},on:{\"click\":function($event){_vm.is_active = !_vm.is_active}}},[_c('span',[_vm._v(_vm._s(_vm.value))]),_vm._m(0)])]),_c('div',{staticClass:\"dropdown-menu\",attrs:{\"id\":\"dropdown-menu\",\"role\":\"menu\"}},[_c('div',{staticClass:\"dropdown-content\"},_vm._l((_vm.options),function(option){return _c('a',{key:option,staticClass:\"dropdown-item\",class:{'is-active': _vm.value === option},on:{\"click\":function($event){return _vm.select(option)}}},[_vm._v(\" \"+_vm._s(option)+\" \")])}),0)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-chevron-down\",attrs:{\"aria-hidden\":\"true\"}})])}]\n\nexport { render, staticRenderFns }","<template>\n <div class=\"dropdown\" :class=\"{ 'is-active': is_active }\" v-click-outside=\"onClickOutside\">\n <div class=\"dropdown-trigger\">\n <button class=\"button\" aria-haspopup=\"true\" aria-controls=\"dropdown-menu\" @click=\"is_active = !is_active\">\n <span>{{ value }}</span>\n <span class=\"icon is-small\">\n <i class=\"mdi mdi-chevron-down\" aria-hidden=\"true\"></i>\n </span>\n </button>\n </div>\n <div class=\"dropdown-menu\" id=\"dropdown-menu\" role=\"menu\">\n <div class=\"dropdown-content\">\n <a class=\"dropdown-item\"\n v-for=\"option in options\" :key=\"option\"\n :class=\"{'is-active': value === option}\"\n @click=\"select(option)\">\n {{ option }}\n </a>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'DropdownMenu',\n\n props: ['value', 'options'],\n\n data () {\n return {\n is_active: false\n }\n },\n\n methods: {\n onClickOutside (event) {\n this.is_active = false\n },\n\n select (option) {\n this.is_active = false\n this.$emit('input', option)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DropdownMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DropdownMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DropdownMenu.vue?vue&type=template&id=56ac032b&\"\nimport script from \"./DropdownMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./DropdownMenu.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <tabs-music></tabs-music>\n\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"artists_list.indexList\"></index-button-list>\n\n <div class=\"columns\">\n <div class=\"column\">\n <p class=\"heading\" style=\"margin-bottom: 24px;\">Filter</p>\n <div class=\"field\">\n <div class=\"control\">\n <input id=\"switchHideSingles\" type=\"checkbox\" name=\"switchHideSingles\" class=\"switch\" v-model=\"hide_singles\">\n <label for=\"switchHideSingles\">Hide singles</label>\n </div>\n <p class=\"help\">If active, hides artists that only appear on singles or playlists.</p>\n </div>\n <div class=\"field\" v-if=\"spotify_enabled\">\n <div class=\"control\">\n <input id=\"switchHideSpotify\" type=\"checkbox\" name=\"switchHideSpotify\" class=\"switch\" v-model=\"hide_spotify\">\n <label for=\"switchHideSpotify\">Hide artists from Spotify</label>\n </div>\n <p class=\"help\">If active, hides artists that only appear in your Spotify library.</p>\n </div>\n </div>\n <div class=\"column\">\n <p class=\"heading\" style=\"margin-bottom: 24px;\">Sort by</p>\n <dropdown-menu v-model=\"sort\" :options=\"sort_options\"></dropdown-menu>\n </div>\n </div>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Artists</p>\n <p class=\"heading\">{{ artists_list.sortedAndFiltered.length }} Artists</p>\n </template>\n <template slot=\"heading-right\">\n </template>\n <template slot=\"content\">\n <list-artists :artists=\"artists_list\"></list-artists>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ListArtists from '@/components/ListArtists'\nimport DropdownMenu from '@/components/DropdownMenu'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\nimport Artists from '@/lib/Artists'\n\nconst artistsData = {\n load: function (to) {\n return webapi.library_artists('music')\n },\n\n set: function (vm, response) {\n vm.artists = response.data\n }\n}\n\nexport default {\n name: 'PageArtists',\n mixins: [LoadDataBeforeEnterMixin(artistsData)],\n components: { ContentWithHeading, TabsMusic, IndexButtonList, ListArtists, DropdownMenu },\n\n data () {\n return {\n artists: { items: [] },\n sort_options: ['Name', 'Recently added']\n }\n },\n\n computed: {\n artists_list () {\n return new Artists(this.artists.items, {\n hideSingles: this.hide_singles,\n hideSpotify: this.hide_spotify,\n sort: this.sort,\n group: true\n })\n },\n\n spotify_enabled () {\n return this.$store.state.spotify.webapi_token_valid\n },\n\n hide_singles: {\n get () {\n return this.$store.state.hide_singles\n },\n set (value) {\n this.$store.commit(types.HIDE_SINGLES, value)\n }\n },\n\n hide_spotify: {\n get () {\n return this.$store.state.hide_spotify\n },\n set (value) {\n this.$store.commit(types.HIDE_SPOTIFY, value)\n }\n },\n\n sort: {\n get () {\n return this.$store.state.artists_sort\n },\n set (value) {\n this.$store.commit(types.ARTISTS_SORT, value)\n }\n }\n },\n\n methods: {\n scrollToTop: function () {\n window.scrollTo({ top: 0, behavior: 'smooth' })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageArtists.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageArtists.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageArtists.vue?vue&type=template&id=3d4c8b43&\"\nimport script from \"./PageArtists.vue?vue&type=script&lang=js&\"\nexport * from \"./PageArtists.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-heading',[_c('template',{slot:\"options\"},[_c('div',{staticClass:\"columns\"},[_c('div',{staticClass:\"column\"},[_c('p',{staticClass:\"heading\",staticStyle:{\"margin-bottom\":\"24px\"}},[_vm._v(\"Sort by\")]),_c('dropdown-menu',{attrs:{\"options\":_vm.sort_options},model:{value:(_vm.sort),callback:function ($$v) {_vm.sort=$$v},expression:\"sort\"}})],1)])]),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.artist.name))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_artist_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.artist.album_count)+\" albums | \"),_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_tracks}},[_vm._v(_vm._s(_vm.artist.track_count)+\" tracks\")])]),_c('list-albums',{attrs:{\"albums\":_vm.albums_list}}),_c('modal-dialog-artist',{attrs:{\"show\":_vm.show_artist_details_modal,\"artist\":_vm.artist},on:{\"close\":function($event){_vm.show_artist_details_modal = false}}})],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <content-with-heading>\n <template slot=\"options\">\n <div class=\"columns\">\n <div class=\"column\">\n <p class=\"heading\" style=\"margin-bottom: 24px;\">Sort by</p>\n <dropdown-menu v-model=\"sort\" :options=\"sort_options\"></dropdown-menu>\n </div>\n </div>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ artist.name }}</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_artist_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ artist.album_count }} albums | <a class=\"has-text-link\" @click=\"open_tracks\">{{ artist.track_count }} tracks</a></p>\n <list-albums :albums=\"albums_list\"></list-albums>\n <modal-dialog-artist :show=\"show_artist_details_modal\" :artist=\"artist\" @close=\"show_artist_details_modal = false\" />\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListAlbums from '@/components/ListAlbums'\nimport ModalDialogArtist from '@/components/ModalDialogArtist'\nimport DropdownMenu from '@/components/DropdownMenu'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\nimport Albums from '@/lib/Albums'\n\nconst artistData = {\n load: function (to) {\n return Promise.all([\n webapi.library_artist(to.params.artist_id),\n webapi.library_artist_albums(to.params.artist_id)\n ])\n },\n\n set: function (vm, response) {\n vm.artist = response[0].data\n vm.albums = response[1].data\n }\n}\n\nexport default {\n name: 'PageArtist',\n mixins: [LoadDataBeforeEnterMixin(artistData)],\n components: { ContentWithHeading, ListAlbums, ModalDialogArtist, DropdownMenu },\n\n data () {\n return {\n artist: {},\n albums: { items: [] },\n\n sort_options: ['Name', 'Release date'],\n show_artist_details_modal: false\n }\n },\n\n computed: {\n albums_list () {\n return new Albums(this.albums.items, {\n sort: this.sort,\n group: false\n })\n },\n\n sort: {\n get () {\n return this.$store.state.artist_albums_sort\n },\n set (value) {\n this.$store.commit(types.ARTIST_ALBUMS_SORT, value)\n }\n }\n },\n\n methods: {\n open_tracks: function () {\n this.$router.push({ path: '/music/artists/' + this.artist.id + '/tracks' })\n },\n\n play: function () {\n webapi.player_play_uri(this.albums.items.map(a => a.uri).join(','), true)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageArtist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageArtist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageArtist.vue?vue&type=template&id=03dca38a&\"\nimport script from \"./PageArtist.vue?vue&type=script&lang=js&\"\nexport * from \"./PageArtist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.albums_list.indexList}}),_c('div',{staticClass:\"columns\"},[_c('div',{staticClass:\"column\"},[_c('p',{staticClass:\"heading\",staticStyle:{\"margin-bottom\":\"24px\"}},[_vm._v(\"Filter\")]),_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.hide_singles),expression:\"hide_singles\"}],staticClass:\"switch\",attrs:{\"id\":\"switchHideSingles\",\"type\":\"checkbox\",\"name\":\"switchHideSingles\"},domProps:{\"checked\":Array.isArray(_vm.hide_singles)?_vm._i(_vm.hide_singles,null)>-1:(_vm.hide_singles)},on:{\"change\":function($event){var $$a=_vm.hide_singles,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.hide_singles=$$a.concat([$$v]))}else{$$i>-1&&(_vm.hide_singles=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.hide_singles=$$c}}}}),_c('label',{attrs:{\"for\":\"switchHideSingles\"}},[_vm._v(\"Hide singles\")])]),_c('p',{staticClass:\"help\"},[_vm._v(\"If active, hides singles and albums with tracks that only appear in playlists.\")])]),(_vm.spotify_enabled)?_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.hide_spotify),expression:\"hide_spotify\"}],staticClass:\"switch\",attrs:{\"id\":\"switchHideSpotify\",\"type\":\"checkbox\",\"name\":\"switchHideSpotify\"},domProps:{\"checked\":Array.isArray(_vm.hide_spotify)?_vm._i(_vm.hide_spotify,null)>-1:(_vm.hide_spotify)},on:{\"change\":function($event){var $$a=_vm.hide_spotify,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.hide_spotify=$$a.concat([$$v]))}else{$$i>-1&&(_vm.hide_spotify=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.hide_spotify=$$c}}}}),_c('label',{attrs:{\"for\":\"switchHideSpotify\"}},[_vm._v(\"Hide albums from Spotify\")])]),_c('p',{staticClass:\"help\"},[_vm._v(\"If active, hides albums that only appear in your Spotify library.\")])]):_vm._e()]),_c('div',{staticClass:\"column\"},[_c('p',{staticClass:\"heading\",staticStyle:{\"margin-bottom\":\"24px\"}},[_vm._v(\"Sort by\")]),_c('dropdown-menu',{attrs:{\"options\":_vm.sort_options},model:{value:(_vm.sort),callback:function ($$v) {_vm.sort=$$v},expression:\"sort\"}})],1)])],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Albums\")]),_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.albums_list.sortedAndFiltered.length)+\" Albums\")])]),_c('template',{slot:\"heading-right\"}),_c('template',{slot:\"content\"},[_c('list-albums',{attrs:{\"albums\":_vm.albums_list}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-music></tabs-music>\n\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"albums_list.indexList\"></index-button-list>\n\n <div class=\"columns\">\n <div class=\"column\">\n <p class=\"heading\" style=\"margin-bottom: 24px;\">Filter</p>\n <div class=\"field\">\n <div class=\"control\">\n <input id=\"switchHideSingles\" type=\"checkbox\" name=\"switchHideSingles\" class=\"switch\" v-model=\"hide_singles\">\n <label for=\"switchHideSingles\">Hide singles</label>\n </div>\n <p class=\"help\">If active, hides singles and albums with tracks that only appear in playlists.</p>\n </div>\n <div class=\"field\" v-if=\"spotify_enabled\">\n <div class=\"control\">\n <input id=\"switchHideSpotify\" type=\"checkbox\" name=\"switchHideSpotify\" class=\"switch\" v-model=\"hide_spotify\">\n <label for=\"switchHideSpotify\">Hide albums from Spotify</label>\n </div>\n <p class=\"help\">If active, hides albums that only appear in your Spotify library.</p>\n </div>\n </div>\n <div class=\"column\">\n <p class=\"heading\" style=\"margin-bottom: 24px;\">Sort by</p>\n <dropdown-menu v-model=\"sort\" :options=\"sort_options\"></dropdown-menu>\n </div>\n </div>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Albums</p>\n <p class=\"heading\">{{ albums_list.sortedAndFiltered.length }} Albums</p>\n </template>\n <template slot=\"heading-right\">\n </template>\n <template slot=\"content\">\n <list-albums :albums=\"albums_list\"></list-albums>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ListAlbums from '@/components/ListAlbums'\nimport DropdownMenu from '@/components/DropdownMenu'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\nimport Albums from '@/lib/Albums'\n\nconst albumsData = {\n load: function (to) {\n return webapi.library_albums('music')\n },\n\n set: function (vm, response) {\n vm.albums = response.data\n vm.index_list = [...new Set(vm.albums.items\n .filter(album => !vm.$store.state.hide_singles || album.track_count > 2)\n .map(album => album.name_sort.charAt(0).toUpperCase()))]\n }\n}\n\nexport default {\n name: 'PageAlbums',\n mixins: [LoadDataBeforeEnterMixin(albumsData)],\n components: { ContentWithHeading, TabsMusic, IndexButtonList, ListAlbums, DropdownMenu },\n\n data () {\n return {\n albums: { items: [] },\n sort_options: ['Name', 'Recently added', 'Recently released']\n }\n },\n\n computed: {\n albums_list () {\n return new Albums(this.albums.items, {\n hideSingles: this.hide_singles,\n hideSpotify: this.hide_spotify,\n sort: this.sort,\n group: true\n })\n },\n\n spotify_enabled () {\n return this.$store.state.spotify.webapi_token_valid\n },\n\n hide_singles: {\n get () {\n return this.$store.state.hide_singles\n },\n set (value) {\n this.$store.commit(types.HIDE_SINGLES, value)\n }\n },\n\n hide_spotify: {\n get () {\n return this.$store.state.hide_spotify\n },\n set (value) {\n this.$store.commit(types.HIDE_SPOTIFY, value)\n }\n },\n\n sort: {\n get () {\n return this.$store.state.albums_sort\n },\n set (value) {\n this.$store.commit(types.ALBUMS_SORT, value)\n }\n }\n },\n\n methods: {\n scrollToTop: function () {\n window.scrollTo({ top: 0, behavior: 'smooth' })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAlbums.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAlbums.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageAlbums.vue?vue&type=template&id=f8e2027c&\"\nimport script from \"./PageAlbums.vue?vue&type=script&lang=js&\"\nexport * from \"./PageAlbums.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-hero',[_c('template',{slot:\"heading-left\"},[_c('h1',{staticClass:\"title is-5\"},[_vm._v(_vm._s(_vm.album.name))]),_c('h2',{staticClass:\"subtitle is-6 has-text-link has-text-weight-normal\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.album.artist))])]),_c('div',{staticClass:\"buttons fd-is-centered-mobile fd-has-margin-top\"},[_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])]),_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_album_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])])])]),_c('template',{slot:\"heading-right\"},[_c('p',{staticClass:\"image is-square fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":_vm.album.artwork_url,\"artist\":_vm.album.artist,\"album\":_vm.album.name},on:{\"click\":function($event){_vm.show_album_details_modal = true}}})],1)]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading is-7 has-text-centered-mobile fd-has-margin-top\"},[_vm._v(_vm._s(_vm.album.track_count)+\" tracks\")]),_c('list-tracks',{attrs:{\"tracks\":_vm.tracks,\"uris\":_vm.album.uri}}),_c('modal-dialog-album',{attrs:{\"show\":_vm.show_album_details_modal,\"album\":_vm.album},on:{\"close\":function($event){_vm.show_album_details_modal = false}}})],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <content-with-hero>\n <template slot=\"heading-left\">\n <h1 class=\"title is-5\">{{ album.name }}</h1>\n <h2 class=\"subtitle is-6 has-text-link has-text-weight-normal\"><a class=\"has-text-link\" @click=\"open_artist\">{{ album.artist }}</a></h2>\n\n <div class=\"buttons fd-is-centered-mobile fd-has-margin-top\">\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n <a class=\"button is-small is-light is-rounded\" @click=\"show_album_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n </div>\n </template>\n <template slot=\"heading-right\">\n <p class=\"image is-square fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"album.artwork_url\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n @click=\"show_album_details_modal = true\" />\n </p>\n </template>\n <template slot=\"content\">\n <p class=\"heading is-7 has-text-centered-mobile fd-has-margin-top\">{{ album.track_count }} tracks</p>\n <list-tracks :tracks=\"tracks\" :uris=\"album.uri\"></list-tracks>\n <modal-dialog-album :show=\"show_album_details_modal\" :album=\"album\" @close=\"show_album_details_modal = false\" />\n </template>\n </content-with-hero>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHero from '@/templates/ContentWithHero'\nimport ListTracks from '@/components/ListTracks'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport webapi from '@/webapi'\n\nconst albumData = {\n load: function (to) {\n return Promise.all([\n webapi.library_album(to.params.album_id),\n webapi.library_album_tracks(to.params.album_id)\n ])\n },\n\n set: function (vm, response) {\n vm.album = response[0].data\n vm.tracks = response[1].data.items\n }\n}\n\nexport default {\n name: 'PageAlbum',\n mixins: [LoadDataBeforeEnterMixin(albumData)],\n components: { ContentWithHero, ListTracks, ModalDialogAlbum, CoverArtwork },\n\n data () {\n return {\n album: {},\n tracks: [],\n\n show_album_details_modal: false\n }\n },\n\n methods: {\n open_artist: function () {\n this.show_details_modal = false\n this.$router.push({ path: '/music/artists/' + this.album.artist_id })\n },\n\n play: function () {\n webapi.player_play_uri(this.album.uri, true)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAlbum.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAlbum.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageAlbum.vue?vue&type=template&id=ad2b3a70&\"\nimport script from \"./PageAlbum.vue?vue&type=script&lang=js&\"\nexport * from \"./PageAlbum.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.index_list}})],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Genres\")]),_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.genres.total)+\" genres\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.genres.items),function(genre){return _c('list-item-genre',{key:genre.name,attrs:{\"genre\":genre},on:{\"click\":function($event){return _vm.open_genre(genre)}}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(genre)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('modal-dialog-genre',{attrs:{\"show\":_vm.show_details_modal,\"genre\":_vm.selected_genre},on:{\"close\":function($event){_vm.show_details_modal = false}}})],2)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\",attrs:{\"id\":'index_' + _vm.props.genre.name.charAt(0).toUpperCase()}},[_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.listeners.click}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.props.genre.name))])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template functional>\n <div class=\"media\" :id=\"'index_' + props.genre.name.charAt(0).toUpperCase()\">\n <div class=\"media-content fd-has-action is-clipped\" @click=\"listeners.click\">\n <h1 class=\"title is-6\">{{ props.genre.name }}</h1>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'ListItemGenre',\n props: ['genre']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemGenre.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemGenre.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListItemGenre.vue?vue&type=template&id=526e97c7&functional=true&\"\nimport script from \"./ListItemGenre.vue?vue&type=script&lang=js&\"\nexport * from \"./ListItemGenre.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_genre}},[_vm._v(_vm._s(_vm.genre.name))])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n <a class=\"has-text-link\" @click=\"open_genre\">{{ genre.name }}</a>\n </p>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogGenre',\n props: ['show', 'genre'],\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_expression('genre is \"' + this.genre.name + '\" and media_kind is music', false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_expression_add('genre is \"' + this.genre.name + '\" and media_kind is music')\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_expression_add_next('genre is \"' + this.genre.name + '\" and media_kind is music')\n },\n\n open_genre: function () {\n this.$emit('close')\n this.$router.push({ name: 'Genre', params: { genre: this.genre.name } })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogGenre.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogGenre.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogGenre.vue?vue&type=template&id=f6ef5fb8&\"\nimport script from \"./ModalDialogGenre.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogGenre.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <tabs-music></tabs-music>\n\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"index_list\"></index-button-list>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Genres</p>\n <p class=\"heading\">{{ genres.total }} genres</p>\n </template>\n <template slot=\"content\">\n <list-item-genre v-for=\"genre in genres.items\" :key=\"genre.name\" :genre=\"genre\" @click=\"open_genre(genre)\">\n <template slot=\"actions\">\n <a @click=\"open_dialog(genre)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-genre>\n <modal-dialog-genre :show=\"show_details_modal\" :genre=\"selected_genre\" @close=\"show_details_modal = false\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ListItemGenre from '@/components/ListItemGenre'\nimport ModalDialogGenre from '@/components/ModalDialogGenre'\nimport webapi from '@/webapi'\n\nconst genresData = {\n load: function (to) {\n return webapi.library_genres()\n },\n\n set: function (vm, response) {\n vm.genres = response.data\n }\n}\n\nexport default {\n name: 'PageGenres',\n mixins: [LoadDataBeforeEnterMixin(genresData)],\n components: { ContentWithHeading, TabsMusic, IndexButtonList, ListItemGenre, ModalDialogGenre },\n\n data () {\n return {\n genres: { items: [] },\n\n show_details_modal: false,\n selected_genre: {}\n }\n },\n\n computed: {\n index_list () {\n return [...new Set(this.genres.items\n .map(genre => genre.name.charAt(0).toUpperCase()))]\n }\n },\n\n methods: {\n open_genre: function (genre) {\n this.$router.push({ name: 'Genre', params: { genre: genre.name } })\n },\n\n open_dialog: function (genre) {\n this.selected_genre = genre\n this.show_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageGenres.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageGenres.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageGenres.vue?vue&type=template&id=9a23c802&\"\nimport script from \"./PageGenres.vue?vue&type=script&lang=js&\"\nexport * from \"./PageGenres.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.index_list}})],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.name))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_genre_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.genre_albums.total)+\" albums | \"),_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_tracks}},[_vm._v(\"tracks\")])]),_c('list-albums',{attrs:{\"albums\":_vm.genre_albums.items}}),_c('modal-dialog-genre',{attrs:{\"show\":_vm.show_genre_details_modal,\"genre\":{ 'name': _vm.name }},on:{\"close\":function($event){_vm.show_genre_details_modal = false}}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"index_list\"></index-button-list>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ name }}</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_genre_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ genre_albums.total }} albums | <a class=\"has-text-link\" @click=\"open_tracks\">tracks</a></p>\n <list-albums :albums=\"genre_albums.items\"></list-albums>\n <modal-dialog-genre :show=\"show_genre_details_modal\" :genre=\"{ 'name': name }\" @close=\"show_genre_details_modal = false\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ListAlbums from '@/components/ListAlbums'\nimport ModalDialogGenre from '@/components/ModalDialogGenre'\nimport webapi from '@/webapi'\n\nconst genreData = {\n load: function (to) {\n return webapi.library_genre(to.params.genre)\n },\n\n set: function (vm, response) {\n vm.name = vm.$route.params.genre\n vm.genre_albums = response.data.albums\n }\n}\n\nexport default {\n name: 'PageGenre',\n mixins: [LoadDataBeforeEnterMixin(genreData)],\n components: { ContentWithHeading, IndexButtonList, ListAlbums, ModalDialogGenre },\n\n data () {\n return {\n name: '',\n genre_albums: { items: [] },\n\n show_genre_details_modal: false\n }\n },\n\n computed: {\n index_list () {\n return [...new Set(this.genre_albums.items\n .map(album => album.name.charAt(0).toUpperCase()))]\n }\n },\n\n methods: {\n open_tracks: function () {\n this.show_details_modal = false\n this.$router.push({ name: 'GenreTracks', params: { genre: this.name } })\n },\n\n play: function () {\n webapi.player_play_expression('genre is \"' + this.name + '\" and media_kind is music', true)\n },\n\n open_dialog: function (album) {\n this.selected_album = album\n this.show_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageGenre.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageGenre.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageGenre.vue?vue&type=template&id=2268caa3&\"\nimport script from \"./PageGenre.vue?vue&type=script&lang=js&\"\nexport * from \"./PageGenre.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.index_list}})],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.genre))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_genre_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_genre}},[_vm._v(\"albums\")]),_vm._v(\" | \"+_vm._s(_vm.tracks.total)+\" tracks\")]),_c('list-tracks',{attrs:{\"tracks\":_vm.tracks.items,\"expression\":_vm.expression}}),_c('modal-dialog-genre',{attrs:{\"show\":_vm.show_genre_details_modal,\"genre\":{ 'name': _vm.genre }},on:{\"close\":function($event){_vm.show_genre_details_modal = false}}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"index_list\"></index-button-list>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ genre }}</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_genre_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\"><a class=\"has-text-link\" @click=\"open_genre\">albums</a> | {{ tracks.total }} tracks</p>\n <list-tracks :tracks=\"tracks.items\" :expression=\"expression\"></list-tracks>\n <modal-dialog-genre :show=\"show_genre_details_modal\" :genre=\"{ 'name': genre }\" @close=\"show_genre_details_modal = false\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ListTracks from '@/components/ListTracks'\nimport ModalDialogGenre from '@/components/ModalDialogGenre'\nimport webapi from '@/webapi'\n\nconst tracksData = {\n load: function (to) {\n return webapi.library_genre_tracks(to.params.genre)\n },\n\n set: function (vm, response) {\n vm.genre = vm.$route.params.genre\n vm.tracks = response.data.tracks\n }\n}\n\nexport default {\n name: 'PageGenreTracks',\n mixins: [LoadDataBeforeEnterMixin(tracksData)],\n components: { ContentWithHeading, ListTracks, IndexButtonList, ModalDialogGenre },\n\n data () {\n return {\n tracks: { items: [] },\n genre: '',\n\n show_genre_details_modal: false\n }\n },\n\n computed: {\n index_list () {\n return [...new Set(this.tracks.items\n .map(track => track.title_sort.charAt(0).toUpperCase()))]\n },\n\n expression () {\n return 'genre is \"' + this.genre + '\" and media_kind is music'\n }\n },\n\n methods: {\n open_genre: function () {\n this.show_details_modal = false\n this.$router.push({ name: 'Genre', params: { genre: this.genre } })\n },\n\n play: function () {\n webapi.player_play_expression(this.expression, true)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageGenreTracks.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageGenreTracks.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageGenreTracks.vue?vue&type=template&id=0fff7765&\"\nimport script from \"./PageGenreTracks.vue?vue&type=script&lang=js&\"\nexport * from \"./PageGenreTracks.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.index_list}})],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.artist.name))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_artist_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.artist.album_count)+\" albums\")]),_vm._v(\" | \"+_vm._s(_vm.artist.track_count)+\" tracks\")]),_c('list-tracks',{attrs:{\"tracks\":_vm.tracks.items,\"uris\":_vm.track_uris}}),_c('modal-dialog-artist',{attrs:{\"show\":_vm.show_artist_details_modal,\"artist\":_vm.artist},on:{\"close\":function($event){_vm.show_artist_details_modal = false}}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"index_list\"></index-button-list>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ artist.name }}</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_artist_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\"><a class=\"has-text-link\" @click=\"open_artist\">{{ artist.album_count }} albums</a> | {{ artist.track_count }} tracks</p>\n <list-tracks :tracks=\"tracks.items\" :uris=\"track_uris\"></list-tracks>\n <modal-dialog-artist :show=\"show_artist_details_modal\" :artist=\"artist\" @close=\"show_artist_details_modal = false\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ListTracks from '@/components/ListTracks'\nimport ModalDialogArtist from '@/components/ModalDialogArtist'\nimport webapi from '@/webapi'\n\nconst tracksData = {\n load: function (to) {\n return Promise.all([\n webapi.library_artist(to.params.artist_id),\n webapi.library_artist_tracks(to.params.artist_id)\n ])\n },\n\n set: function (vm, response) {\n vm.artist = response[0].data\n vm.tracks = response[1].data.tracks\n }\n}\n\nexport default {\n name: 'PageArtistTracks',\n mixins: [LoadDataBeforeEnterMixin(tracksData)],\n components: { ContentWithHeading, ListTracks, IndexButtonList, ModalDialogArtist },\n\n data () {\n return {\n artist: {},\n tracks: { items: [] },\n\n show_artist_details_modal: false\n }\n },\n\n computed: {\n index_list () {\n return [...new Set(this.tracks.items\n .map(track => track.title_sort.charAt(0).toUpperCase()))]\n },\n\n track_uris () {\n return this.tracks.items.map(a => a.uri).join(',')\n }\n },\n\n methods: {\n open_artist: function () {\n this.show_details_modal = false\n this.$router.push({ path: '/music/artists/' + this.artist.id })\n },\n\n play: function () {\n webapi.player_play_uri(this.tracks.items.map(a => a.uri).join(','), true)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageArtistTracks.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageArtistTracks.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageArtistTracks.vue?vue&type=template&id=6da2b51e&\"\nimport script from \"./PageArtistTracks.vue?vue&type=script&lang=js&\"\nexport * from \"./PageArtistTracks.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.composers_list.indexList}})],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.heading))]),_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.composers.total)+\" composers\")])]),_c('template',{slot:\"content\"},[_c('list-composers',{attrs:{\"composers\":_vm.composers_list}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.is_grouped)?_c('div',_vm._l((_vm.composers.indexList),function(idx){return _c('div',{key:idx,staticClass:\"mb-6\"},[_c('span',{staticClass:\"tag is-info is-light is-small has-text-weight-bold\",attrs:{\"id\":'index_' + idx}},[_vm._v(_vm._s(idx))]),_vm._l((_vm.composers.grouped[idx]),function(composer){return _c('list-item-composer',{key:composer.id,attrs:{\"composer\":composer},on:{\"click\":function($event){return _vm.open_composer(composer)}}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(composer)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)})],2)}),0):_c('div',_vm._l((_vm.composers_list),function(composer){return _c('list-item-composer',{key:composer.id,attrs:{\"composer\":composer},on:{\"click\":function($event){return _vm.open_composer(composer)}}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(composer)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),1),_c('modal-dialog-composer',{attrs:{\"show\":_vm.show_details_modal,\"composer\":_vm.selected_composer,\"media_kind\":_vm.media_kind},on:{\"close\":function($event){_vm.show_details_modal = false}}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\",attrs:{\"id\":'index_' + _vm.props.composer.name.charAt(0).toUpperCase()}},[_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.listeners.click}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.props.composer.name))])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template functional>\n <div class=\"media\" :id=\"'index_' + props.composer.name.charAt(0).toUpperCase()\">\n <div class=\"media-content fd-has-action is-clipped\" @click=\"listeners.click\">\n <h1 class=\"title is-6\">{{ props.composer.name }}</h1>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'ListItemComposer',\n props: ['composer']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemComposer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemComposer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListItemComposer.vue?vue&type=template&id=aed2a034&functional=true&\"\nimport script from \"./ListItemComposer.vue?vue&type=script&lang=js&\"\nexport * from \"./ListItemComposer.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_albums}},[_vm._v(_vm._s(_vm.composer.name))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Albums\")]),_c('a',{staticClass:\"has-text-link is-6\",on:{\"click\":_vm.open_albums}},[_vm._v(_vm._s(_vm.composer.album_count))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Tracks\")]),_c('a',{staticClass:\"has-text-link is-6\",on:{\"click\":_vm.open_tracks}},[_vm._v(_vm._s(_vm.composer.track_count))])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n <a class=\"has-text-link\" @click=\"open_albums\">{{ composer.name }}</a>\n </p>\n <p>\n <span class=\"heading\">Albums</span>\n <a class=\"has-text-link is-6\" @click=\"open_albums\">{{ composer.album_count }}</a>\n </p>\n <p>\n <span class=\"heading\">Tracks</span>\n <a class=\"has-text-link is-6\" @click=\"open_tracks\">{{ composer.track_count }}</a>\n </p>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogComposer',\n props: ['show', 'composer'],\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_expression('composer is \"' + this.composer.name + '\" and media_kind is music', false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_expression_add('composer is \"' + this.composer.name + '\" and media_kind is music')\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_expression_add_next('composer is \"' + this.composer.name + '\" and media_kind is music')\n },\n\n open_albums: function () {\n this.$emit('close')\n this.$router.push({ name: 'ComposerAlbums', params: { composer: this.composer.name } })\n },\n\n open_tracks: function () {\n this.show_details_modal = false\n this.$router.push({ name: 'ComposerTracks', params: { composer: this.composer.name } })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogComposer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogComposer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogComposer.vue?vue&type=template&id=62d4b261&\"\nimport script from \"./ModalDialogComposer.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogComposer.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\nexport default class Composers {\n constructor (items, options = { hideSingles: false, hideSpotify: false, sort: 'Name', group: false }) {\n this.items = items\n this.options = options\n this.grouped = {}\n this.sortedAndFiltered = []\n this.indexList = []\n\n this.init()\n }\n\n init () {\n this.createSortedAndFilteredList()\n this.createGroupedList()\n this.createIndexList()\n }\n\n getComposerIndex (composer) {\n if (this.options.sort === 'Name') {\n return composer.name_sort.charAt(0).toUpperCase()\n }\n return composer.time_added.substring(0, 4)\n }\n\n isComposerVisible (composer) {\n if (this.options.hideSingles && composer.track_count <= (composer.album_count * 2)) {\n return false\n }\n if (this.options.hideSpotify && composer.data_kind === 'spotify') {\n return false\n }\n return true\n }\n\n createIndexList () {\n this.indexList = [...new Set(this.sortedAndFiltered\n .map(composer => this.getComposerIndex(composer)))]\n }\n\n createSortedAndFilteredList () {\n let composersSorted = this.items\n if (this.options.hideSingles || this.options.hideSpotify || this.options.hideOther) {\n composersSorted = composersSorted.filter(composer => this.isComposerVisible(composer))\n }\n if (this.options.sort === 'Recently added') {\n composersSorted = [...composersSorted].sort((a, b) => b.time_added.localeCompare(a.time_added))\n }\n this.sortedAndFiltered = composersSorted\n }\n\n createGroupedList () {\n if (!this.options.group) {\n this.grouped = {}\n }\n this.grouped = this.sortedAndFiltered.reduce((r, composer) => {\n const idx = this.getComposerIndex(composer)\n r[idx] = [...r[idx] || [], composer]\n return r\n }, {})\n }\n}\n","<template>\n <div>\n <div v-if=\"is_grouped\">\n <div v-for=\"idx in composers.indexList\" :key=\"idx\" class=\"mb-6\">\n <span class=\"tag is-info is-light is-small has-text-weight-bold\" :id=\"'index_' + idx\">{{ idx }}</span>\n <list-item-composer v-for=\"composer in composers.grouped[idx]\"\n :key=\"composer.id\"\n :composer=\"composer\"\n @click=\"open_composer(composer)\">\n <template slot=\"actions\">\n <a @click=\"open_dialog(composer)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-composer>\n </div>\n </div>\n <div v-else>\n <list-item-composer v-for=\"composer in composers_list\"\n :key=\"composer.id\"\n :composer=\"composer\"\n @click=\"open_composer(composer)\">\n <template slot=\"actions\">\n <a @click=\"open_dialog(composer)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-composer>\n </div>\n <modal-dialog-composer :show=\"show_details_modal\" :composer=\"selected_composer\" :media_kind=\"media_kind\" @close=\"show_details_modal = false\" />\n </div>\n</template>\n\n<script>\nimport ListItemComposer from '@/components/ListItemComposer'\nimport ModalDialogComposer from '@/components/ModalDialogComposer'\nimport Composers from '@/lib/Composers'\n\nexport default {\n name: 'ListComposers',\n components: { ListItemComposer, ModalDialogComposer },\n\n props: ['composers', 'media_kind'],\n\n data () {\n return {\n show_details_modal: false,\n selected_composer: {}\n }\n },\n\n computed: {\n media_kind_resolved: function () {\n return this.media_kind ? this.media_kind : this.selected_composer.media_kind\n },\n\n composers_list: function () {\n if (Array.isArray(this.composers)) {\n return this.composers\n }\n return this.composers.sortedAndFiltered\n },\n\n is_grouped: function () {\n return (this.composers instanceof Composers && this.composers.options.group)\n }\n },\n\n methods: {\n open_composer: function (composer) {\n this.selected_composer = composer\n this.$router.push({ name: 'ComposerTracks', params: { composer: composer.name } })\n },\n\n open_dialog: function (composer) {\n this.selected_composer = composer\n this.show_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListComposers.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListComposers.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListComposers.vue?vue&type=template&id=b43c93e6&\"\nimport script from \"./ListComposers.vue?vue&type=script&lang=js&\"\nexport * from \"./ListComposers.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <tabs-music></tabs-music>\n\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"composers_list.indexList\"></index-button-list>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ heading }}</p>\n <p class=\"heading\">{{ composers.total }} composers</p>\n </template>\n <template slot=\"content\">\n <list-composers :composers=\"composers_list\"></list-composers>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ListComposers from '@/components/ListComposers'\nimport webapi from '@/webapi'\nimport Composers from '@/lib/Composers'\n\nconst composersData = {\n load: function (to) {\n return webapi.library_composers()\n },\n\n set: function (vm, response) {\n if (response.data.composers) {\n vm.composers = response.data.composers\n vm.heading = vm.$route.params.genre\n } else {\n vm.composers = response.data\n vm.heading = 'Composers'\n }\n }\n}\n\nexport default {\n name: 'PageComposers',\n mixins: [LoadDataBeforeEnterMixin(composersData)],\n components: { ContentWithHeading, TabsMusic, IndexButtonList, ListComposers },\n\n data () {\n return {\n composers: { items: [] },\n heading: '',\n\n show_details_modal: false,\n selected_composer: {}\n }\n },\n\n computed: {\n index_list () {\n return [...new Set(this.composers.items\n .map(composer => composer.name.charAt(0).toUpperCase()))]\n },\n\n composers_list () {\n return new Composers(this.composers.items, {\n sort: 'Name',\n group: true\n })\n }\n },\n\n methods: {\n open_composer: function (composer) {\n this.$router.push({ name: 'ComposerAlbums', params: { composer: composer.name } })\n },\n\n open_dialog: function (composer) {\n this.selected_composer = composer\n this.show_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageComposers.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageComposers.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageComposers.vue?vue&type=template&id=5bbb0646&\"\nimport script from \"./PageComposers.vue?vue&type=script&lang=js&\"\nexport * from \"./PageComposers.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.name))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_composer_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.composer_albums.total)+\" albums | \"),_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_tracks}},[_vm._v(\"tracks\")])]),_vm._l((_vm.composer_albums.items),function(album){return _c('list-item-albums',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(album)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('modal-dialog-album',{attrs:{\"show\":_vm.show_details_modal,\"album\":_vm.selected_album},on:{\"close\":function($event){_vm.show_details_modal = false}}}),_c('modal-dialog-composer',{attrs:{\"show\":_vm.show_composer_details_modal,\"composer\":{ 'name': _vm.name }},on:{\"close\":function($event){_vm.show_composer_details_modal = false}}})],2)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ name }}</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_composer_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ composer_albums.total }} albums | <a class=\"has-text-link\" @click=\"open_tracks\">tracks</a></p>\n <list-item-albums v-for=\"album in composer_albums.items\" :key=\"album.id\" :album=\"album\" @click=\"open_album(album)\">\n <template slot=\"actions\">\n <a @click=\"open_dialog(album)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-albums>\n <modal-dialog-album :show=\"show_details_modal\" :album=\"selected_album\" @close=\"show_details_modal = false\" />\n <modal-dialog-composer :show=\"show_composer_details_modal\" :composer=\"{ 'name': name }\" @close=\"show_composer_details_modal = false\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListItemAlbums from '@/components/ListItemAlbum'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\nimport ModalDialogComposer from '@/components/ModalDialogComposer'\nimport webapi from '@/webapi'\n\nconst composerData = {\n load: function (to) {\n return webapi.library_composer(to.params.composer)\n },\n\n set: function (vm, response) {\n vm.name = vm.$route.params.composer\n vm.composer_albums = response.data.albums\n }\n}\n\nexport default {\n name: 'PageComposer',\n mixins: [LoadDataBeforeEnterMixin(composerData)],\n components: { ContentWithHeading, ListItemAlbums, ModalDialogAlbum, ModalDialogComposer },\n\n data () {\n return {\n name: '',\n composer_albums: { items: [] },\n show_details_modal: false,\n selected_album: {},\n\n show_composer_details_modal: false\n }\n },\n\n computed: {\n index_list () {\n return [...new Set(this.composer_albums.items\n .map(album => album.name_sort.charAt(0).toUpperCase()))]\n }\n },\n\n methods: {\n open_tracks: function () {\n this.show_details_modal = false\n this.$router.push({ name: 'ComposerTracks', params: { composer: this.name } })\n },\n\n play: function () {\n webapi.player_play_expression('composer is \"' + this.name + '\" and media_kind is music', true)\n },\n\n open_album: function (album) {\n this.$router.push({ path: '/music/albums/' + album.id })\n },\n\n open_dialog: function (album) {\n this.selected_album = album\n this.show_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageComposer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageComposer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageComposer.vue?vue&type=template&id=688b219c&\"\nimport script from \"./PageComposer.vue?vue&type=script&lang=js&\"\nexport * from \"./PageComposer.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.composer))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_composer_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_albums}},[_vm._v(\"albums\")]),_vm._v(\" | \"+_vm._s(_vm.tracks.total)+\" tracks\")]),_vm._l((_vm.rated_tracks),function(track,index){return _c('list-item-track',{key:track.id,attrs:{\"track\":track},on:{\"click\":function($event){return _vm.play_track(index)}}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(track)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('modal-dialog-track',{attrs:{\"show\":_vm.show_details_modal,\"track\":_vm.selected_track},on:{\"close\":function($event){_vm.show_details_modal = false}}}),_c('modal-dialog-composer',{attrs:{\"show\":_vm.show_composer_details_modal,\"composer\":{ 'name': _vm.composer }},on:{\"close\":function($event){_vm.show_composer_details_modal = false}}})],2)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ composer }}</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_composer_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\"><a class=\"has-text-link\" @click=\"open_albums\">albums</a> | {{ tracks.total }} tracks</p>\n <list-item-track v-for=\"(track, index) in rated_tracks\" :key=\"track.id\" :track=\"track\" @click=\"play_track(index)\">\n <template slot=\"actions\">\n <a @click=\"open_dialog(track)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-track>\n <modal-dialog-track :show=\"show_details_modal\" :track=\"selected_track\" @close=\"show_details_modal = false\" />\n <modal-dialog-composer :show=\"show_composer_details_modal\" :composer=\"{ 'name': composer }\" @close=\"show_composer_details_modal = false\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListItemTrack from '@/components/ListItemTrack'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\nimport ModalDialogComposer from '@/components/ModalDialogComposer'\nimport webapi from '@/webapi'\n\nconst tracksData = {\n load: function (to) {\n return webapi.library_composer_tracks(to.params.composer)\n },\n\n set: function (vm, response) {\n vm.composer = vm.$route.params.composer\n vm.tracks = response.data.tracks\n }\n}\n\nexport default {\n name: 'PageComposerTracks',\n mixins: [LoadDataBeforeEnterMixin(tracksData)],\n components: { ContentWithHeading, ListItemTrack, ModalDialogTrack, ModalDialogComposer },\n\n data () {\n return {\n tracks: { items: [] },\n composer: '',\n\n min_rating: 0,\n\n show_details_modal: false,\n selected_track: {},\n\n show_composer_details_modal: false\n }\n },\n\n computed: {\n index_list () {\n return [...new Set(this.tracks.items\n .map(track => track.title_sort.charAt(0).toUpperCase()))]\n },\n\n rated_tracks () {\n return this.tracks.items.filter(track => track.rating >= this.min_rating)\n }\n },\n\n methods: {\n open_albums: function () {\n this.show_details_modal = false\n this.$router.push({ name: 'ComposerAlbums', params: { composer: this.composer } })\n },\n\n play: function () {\n webapi.player_play_expression('composer is \"' + this.composer + '\" and media_kind is music', true)\n },\n\n play_track: function (position) {\n webapi.player_play_expression('composer is \"' + this.composer + '\" and media_kind is music', false, position)\n },\n\n show_rating: function (rating) {\n if (rating === 0.5) {\n rating = 0\n }\n this.min_rating = Math.ceil(rating) * 20\n },\n\n open_dialog: function (track) {\n this.selected_track = track\n this.show_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageComposerTracks.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageComposerTracks.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageComposerTracks.vue?vue&type=template&id=d97aa86e&\"\nimport script from \"./PageComposerTracks.vue?vue&type=script&lang=js&\"\nexport * from \"./PageComposerTracks.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.new_episodes.items.length > 0)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"New episodes\")])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small\",on:{\"click\":_vm.mark_all_played}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-pencil\"})]),_c('span',[_vm._v(\"Mark All Played\")])])])]),_c('template',{slot:\"content\"},[_vm._l((_vm.new_episodes.items),function(track){return _c('list-item-track',{key:track.id,attrs:{\"track\":track},on:{\"click\":function($event){return _vm.play_track(track)}}},[_c('template',{slot:\"progress\"},[_c('range-slider',{staticClass:\"track-progress\",attrs:{\"min\":\"0\",\"max\":track.length_ms,\"step\":\"1\",\"disabled\":true,\"value\":track.seek_ms}})],1),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_track_dialog(track)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('modal-dialog-track',{attrs:{\"show\":_vm.show_track_details_modal,\"track\":_vm.selected_track},on:{\"close\":function($event){_vm.show_track_details_modal = false},\"play-count-changed\":_vm.reload_new_episodes}})],2)],2):_vm._e(),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Podcasts\")]),_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.albums.total)+\" podcasts\")])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[(_vm.rss.tracks > 0)?_c('a',{staticClass:\"button is-small\",on:{\"click\":_vm.update_rss}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-refresh\"})]),_c('span',[_vm._v(\"Update\")])]):_vm._e(),_c('a',{staticClass:\"button is-small\",on:{\"click\":_vm.open_add_podcast_dialog}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-rss\"})]),_c('span',[_vm._v(\"Add Podcast\")])])])]),_c('template',{slot:\"content\"},[_c('list-albums',{attrs:{\"albums\":_vm.albums.items},on:{\"play-count-changed\":function($event){return _vm.reload_new_episodes()},\"podcast-deleted\":function($event){return _vm.reload_podcasts()}}}),_c('modal-dialog-add-rss',{attrs:{\"show\":_vm.show_url_modal},on:{\"close\":function($event){_vm.show_url_modal = false},\"podcast-added\":function($event){return _vm.reload_podcasts()}}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Add Podcast RSS feed URL\")]),_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.add_stream.apply(null, arguments)}}},[_c('div',{staticClass:\"field\"},[_c('p',{staticClass:\"control is-expanded has-icons-left\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.url),expression:\"url\"}],ref:\"url_field\",staticClass:\"input is-shadowless\",attrs:{\"type\":\"text\",\"placeholder\":\"http://url-to-rss\",\"disabled\":_vm.loading},domProps:{\"value\":(_vm.url)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.url=$event.target.value}}}),_c('span',{staticClass:\"icon is-left\"},[_c('i',{staticClass:\"mdi mdi-rss\"})])]),_c('p',{staticClass:\"help\"},[_vm._v(\"Adding a podcast includes creating an RSS playlist, that will allow OwnTone to manage the podcast subscription. \")])])])]),(_vm.loading)?_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item button is-loading\"},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-web\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Processing ...\")])])]):_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-danger\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-cancel\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Cancel\")])]),_c('a',{staticClass:\"card-footer-item has-background-info has-text-white has-text-weight-bold\",on:{\"click\":_vm.add_stream}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">Add Podcast RSS feed URL</p>\n <form @submit.prevent=\"add_stream\">\n <div class=\"field\">\n <p class=\"control is-expanded has-icons-left\">\n <input class=\"input is-shadowless\" type=\"text\" placeholder=\"http://url-to-rss\" v-model=\"url\" :disabled=\"loading\" ref=\"url_field\">\n <span class=\"icon is-left\">\n <i class=\"mdi mdi-rss\"></i>\n </span>\n </p>\n <p class=\"help\">Adding a podcast includes creating an RSS playlist, that will allow OwnTone to manage the podcast subscription.\n </p>\n </div>\n </form>\n </div>\n <footer class=\"card-footer\" v-if=\"loading\">\n <a class=\"card-footer-item button is-loading\">\n <span class=\"icon\"><i class=\"mdi mdi-web\"></i></span> <span class=\"is-size-7\">Processing ...</span>\n </a>\n </footer>\n <footer class=\"card-footer\" v-else>\n <a class=\"card-footer-item has-text-danger\" @click=\"$emit('close')\">\n <span class=\"icon\"><i class=\"mdi mdi-cancel\"></i></span> <span class=\"is-size-7\">Cancel</span>\n </a>\n <a class=\"card-footer-item has-background-info has-text-white has-text-weight-bold\" @click=\"add_stream\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogAddRss',\n props: ['show'],\n\n data () {\n return {\n url: '',\n loading: false\n }\n },\n\n methods: {\n add_stream: function () {\n this.loading = true\n webapi.library_add(this.url).then(() => {\n this.$emit('close')\n this.$emit('podcast-added')\n this.url = ''\n }).catch(() => {\n this.loading = false\n })\n }\n },\n\n watch: {\n 'show' () {\n if (this.show) {\n this.loading = false\n\n // We need to delay setting the focus to the input field until the field is part of the dom and visible\n setTimeout(() => {\n this.$refs.url_field.focus()\n }, 10)\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogAddRss.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogAddRss.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogAddRss.vue?vue&type=template&id=2d0ea4be&\"\nimport script from \"./ModalDialogAddRss.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogAddRss.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <content-with-heading v-if=\"new_episodes.items.length > 0\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">New episodes</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small\" @click=\"mark_all_played\">\n <span class=\"icon\">\n <i class=\"mdi mdi-pencil\"></i>\n </span>\n <span>Mark All Played</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <list-item-track v-for=\"track in new_episodes.items\" :key=\"track.id\" :track=\"track\" @click=\"play_track(track)\">\n <template slot=\"progress\">\n <range-slider\n class=\"track-progress\"\n min=\"0\"\n :max=\"track.length_ms\"\n step=\"1\"\n :disabled=\"true\"\n :value=\"track.seek_ms\" >\n </range-slider>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_track_dialog(track)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-track>\n <modal-dialog-track :show=\"show_track_details_modal\" :track=\"selected_track\" @close=\"show_track_details_modal = false\" @play-count-changed=\"reload_new_episodes\" />\n </template>\n </content-with-heading>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Podcasts</p>\n <p class=\"heading\">{{ albums.total }} podcasts</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a v-if=\"rss.tracks > 0\" class=\"button is-small\" @click=\"update_rss\">\n <span class=\"icon\">\n <i class=\"mdi mdi-refresh\"></i>\n </span>\n <span>Update</span>\n </a>\n <a class=\"button is-small\" @click=\"open_add_podcast_dialog\">\n <span class=\"icon\">\n <i class=\"mdi mdi-rss\"></i>\n </span>\n <span>Add Podcast</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <list-albums :albums=\"albums.items\"\n @play-count-changed=\"reload_new_episodes()\"\n @podcast-deleted=\"reload_podcasts()\">\n </list-albums>\n <modal-dialog-add-rss\n :show=\"show_url_modal\"\n @close=\"show_url_modal = false\"\n @podcast-added=\"reload_podcasts()\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListItemTrack from '@/components/ListItemTrack'\nimport ListAlbums from '@/components/ListAlbums'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\nimport ModalDialogAddRss from '@/components/ModalDialogAddRss'\nimport * as types from '@/store/mutation_types'\nimport RangeSlider from 'vue-range-slider'\nimport webapi from '@/webapi'\n\nconst albumsData = {\n load: function (to) {\n return Promise.all([\n webapi.library_albums('podcast'),\n webapi.library_podcasts_new_episodes()\n ])\n },\n\n set: function (vm, response) {\n vm.albums = response[0].data\n vm.new_episodes = response[1].data.tracks\n }\n}\n\nexport default {\n name: 'PagePodcasts',\n mixins: [LoadDataBeforeEnterMixin(albumsData)],\n components: { ContentWithHeading, ListItemTrack, ListAlbums, ModalDialogTrack, ModalDialogAddRss, RangeSlider },\n\n data () {\n return {\n albums: { items: [] },\n new_episodes: { items: [] },\n\n show_url_modal: false,\n\n show_track_details_modal: false,\n selected_track: {}\n }\n },\n\n computed: {\n rss () {\n return this.$store.state.rss_count\n }\n },\n\n methods: {\n play_track: function (track) {\n webapi.player_play_uri(track.uri, false)\n },\n\n open_track_dialog: function (track) {\n this.selected_track = track\n this.show_track_details_modal = true\n },\n\n mark_all_played: function () {\n this.new_episodes.items.forEach(ep => {\n webapi.library_track_update(ep.id, { play_count: 'increment' })\n })\n this.new_episodes.items = { }\n },\n\n open_add_podcast_dialog: function (item) {\n this.show_url_modal = true\n },\n\n reload_new_episodes: function () {\n webapi.library_podcasts_new_episodes().then(({ data }) => {\n this.new_episodes = data.tracks\n })\n },\n\n reload_podcasts: function () {\n webapi.library_albums('podcast').then(({ data }) => {\n this.albums = data\n this.reload_new_episodes()\n })\n },\n\n update_rss: function () {\n this.$store.commit(types.UPDATE_DIALOG_SCAN_KIND, 'rss')\n this.$store.commit(types.SHOW_UPDATE_DIALOG, true)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PagePodcasts.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PagePodcasts.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PagePodcasts.vue?vue&type=template&id=74fd873c&\"\nimport script from \"./PagePodcasts.vue?vue&type=script&lang=js&\"\nexport * from \"./PagePodcasts.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.album.name)+\" \")])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_album_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_c('span',[_vm._v(\"Play\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.album.track_count)+\" tracks\")]),_vm._l((_vm.tracks),function(track){return _c('list-item-track',{key:track.id,attrs:{\"track\":track},on:{\"click\":function($event){return _vm.play_track(track)}}},[_c('template',{slot:\"progress\"},[_c('range-slider',{staticClass:\"track-progress\",attrs:{\"min\":\"0\",\"max\":track.length_ms,\"step\":\"1\",\"disabled\":true,\"value\":track.seek_ms}})],1),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(track)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('modal-dialog-track',{attrs:{\"show\":_vm.show_details_modal,\"track\":_vm.selected_track},on:{\"close\":function($event){_vm.show_details_modal = false},\"play-count-changed\":_vm.reload_tracks}}),_c('modal-dialog-album',{attrs:{\"show\":_vm.show_album_details_modal,\"album\":_vm.album,\"media_kind\":'podcast',\"new_tracks\":_vm.new_tracks},on:{\"close\":function($event){_vm.show_album_details_modal = false},\"play-count-changed\":_vm.reload_tracks,\"remove-podcast\":_vm.open_remove_podcast_dialog}}),_c('modal-dialog',{attrs:{\"show\":_vm.show_remove_podcast_modal,\"title\":\"Remove podcast\",\"delete_action\":\"Remove\"},on:{\"close\":function($event){_vm.show_remove_podcast_modal = false},\"delete\":_vm.remove_podcast}},[_c('template',{slot:\"modal-content\"},[_c('p',[_vm._v(\"Permanently remove this podcast from your library?\")]),_c('p',{staticClass:\"is-size-7\"},[_vm._v(\"(This will also remove the RSS playlist \"),_c('b',[_vm._v(_vm._s(_vm.rss_playlist_to_remove.name))]),_vm._v(\".)\")])])],2)],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">{{ album.name }}\n </div>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_album_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\">\n <i class=\"mdi mdi-play\"></i>\n </span>\n <span>Play</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ album.track_count }} tracks</p>\n <list-item-track v-for=\"track in tracks\" :key=\"track.id\" :track=\"track\" @click=\"play_track(track)\">\n <template slot=\"progress\">\n <range-slider\n class=\"track-progress\"\n min=\"0\"\n :max=\"track.length_ms\"\n step=\"1\"\n :disabled=\"true\"\n :value=\"track.seek_ms\" >\n </range-slider>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_dialog(track)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-track>\n <modal-dialog-track\n :show=\"show_details_modal\"\n :track=\"selected_track\"\n @close=\"show_details_modal = false\"\n @play-count-changed=\"reload_tracks\" />\n <modal-dialog-album\n :show=\"show_album_details_modal\"\n :album=\"album\"\n :media_kind=\"'podcast'\"\n :new_tracks=\"new_tracks\"\n @close=\"show_album_details_modal = false\"\n @play-count-changed=\"reload_tracks\"\n @remove-podcast=\"open_remove_podcast_dialog\" />\n <modal-dialog\n :show=\"show_remove_podcast_modal\"\n title=\"Remove podcast\"\n delete_action=\"Remove\"\n @close=\"show_remove_podcast_modal = false\"\n @delete=\"remove_podcast\">\n <template slot=\"modal-content\">\n <p>Permanently remove this podcast from your library?</p>\n <p class=\"is-size-7\">(This will also remove the RSS playlist <b>{{ rss_playlist_to_remove.name }}</b>.)</p>\n </template>\n </modal-dialog>\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListItemTrack from '@/components/ListItemTrack'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\nimport ModalDialog from '@/components/ModalDialog'\nimport RangeSlider from 'vue-range-slider'\nimport webapi from '@/webapi'\n\nconst albumData = {\n load: function (to) {\n return Promise.all([\n webapi.library_album(to.params.album_id),\n webapi.library_podcast_episodes(to.params.album_id)\n ])\n },\n\n set: function (vm, response) {\n vm.album = response[0].data\n vm.tracks = response[1].data.tracks.items\n }\n}\n\nexport default {\n name: 'PagePodcast',\n mixins: [LoadDataBeforeEnterMixin(albumData)],\n components: { ContentWithHeading, ListItemTrack, ModalDialogTrack, RangeSlider, ModalDialogAlbum, ModalDialog },\n\n data () {\n return {\n album: {},\n tracks: [],\n\n show_details_modal: false,\n selected_track: {},\n\n show_album_details_modal: false,\n\n show_remove_podcast_modal: false,\n rss_playlist_to_remove: {}\n }\n },\n\n computed: {\n new_tracks () {\n return this.tracks.filter(track => track.play_count === 0).length\n }\n },\n\n methods: {\n play: function () {\n webapi.player_play_uri(this.album.uri, false)\n },\n\n play_track: function (track) {\n webapi.player_play_uri(track.uri, false)\n },\n\n open_dialog: function (track) {\n this.selected_track = track\n this.show_details_modal = true\n },\n\n open_remove_podcast_dialog: function () {\n this.show_album_details_modal = false\n webapi.library_track_playlists(this.tracks[0].id).then(({ data }) => {\n const rssPlaylists = data.items.filter(pl => pl.type === 'rss')\n if (rssPlaylists.length !== 1) {\n this.$store.dispatch('add_notification', { text: 'Podcast cannot be removed. Probably it was not added as an RSS playlist.', type: 'danger' })\n return\n }\n\n this.rss_playlist_to_remove = rssPlaylists[0]\n this.show_remove_podcast_modal = true\n })\n },\n\n remove_podcast: function () {\n this.show_remove_podcast_modal = false\n webapi.library_playlist_delete(this.rss_playlist_to_remove.id).then(() => {\n this.$router.replace({ path: '/podcasts' })\n })\n },\n\n reload_tracks: function () {\n webapi.library_podcast_episodes(this.album.id).then(({ data }) => {\n this.tracks = data.tracks.items\n })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PagePodcast.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PagePodcast.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PagePodcast.vue?vue&type=template&id=f135dc2e&\"\nimport script from \"./PagePodcast.vue?vue&type=script&lang=js&\"\nexport * from \"./PagePodcast.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-audiobooks'),_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.albums_list.indexList}})],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Audiobooks\")]),_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.albums_list.sortedAndFiltered.length)+\" Audiobooks\")])]),_c('template',{slot:\"content\"},[_c('list-albums',{attrs:{\"albums\":_vm.albums_list}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"section fd-tabs-section\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('div',{staticClass:\"tabs is-centered is-small\"},[_c('ul',[_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/audiobooks/artists\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-artist\"})]),_c('span',{},[_vm._v(\"Authors\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/audiobooks/albums\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-album\"})]),_c('span',{},[_vm._v(\"Audiobooks\")])])])],1)])])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section class=\"section fd-tabs-section\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <div class=\"tabs is-centered is-small\">\n <ul>\n <router-link tag=\"li\" to=\"/audiobooks/artists\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-artist\"></i></span>\n <span class=\"\">Authors</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/audiobooks/albums\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-album\"></i></span>\n <span class=\"\">Audiobooks</span>\n </a>\n </router-link>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </section>\n</template>\n\n<script>\nexport default {\n name: 'TabsAudiobooks'\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsAudiobooks.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsAudiobooks.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TabsAudiobooks.vue?vue&type=template&id=0cda5528&\"\nimport script from \"./TabsAudiobooks.vue?vue&type=script&lang=js&\"\nexport * from \"./TabsAudiobooks.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <tabs-audiobooks></tabs-audiobooks>\n\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"albums_list.indexList\"></index-button-list>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Audiobooks</p>\n <p class=\"heading\">{{ albums_list.sortedAndFiltered.length }} Audiobooks</p>\n </template>\n <template slot=\"content\">\n <list-albums :albums=\"albums_list\"></list-albums>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport TabsAudiobooks from '@/components/TabsAudiobooks'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListAlbums from '@/components/ListAlbums'\nimport webapi from '@/webapi'\nimport Albums from '@/lib/Albums'\n\nconst albumsData = {\n load: function (to) {\n return webapi.library_albums('audiobook')\n },\n\n set: function (vm, response) {\n vm.albums = response.data\n }\n}\n\nexport default {\n name: 'PageAudiobooksAlbums',\n mixins: [LoadDataBeforeEnterMixin(albumsData)],\n components: { TabsAudiobooks, ContentWithHeading, IndexButtonList, ListAlbums },\n\n data () {\n return {\n albums: { items: [] }\n }\n },\n\n computed: {\n albums_list () {\n return new Albums(this.albums.items, {\n sort: 'Name',\n group: true\n })\n }\n },\n\n methods: {\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAudiobooksAlbums.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAudiobooksAlbums.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageAudiobooksAlbums.vue?vue&type=template&id=35fdc4d3&\"\nimport script from \"./PageAudiobooksAlbums.vue?vue&type=script&lang=js&\"\nexport * from \"./PageAudiobooksAlbums.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-audiobooks'),_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.artists_list.indexList}})],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Authors\")]),_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.artists_list.sortedAndFiltered.length)+\" Authors\")])]),_c('template',{slot:\"heading-right\"}),_c('template',{slot:\"content\"},[_c('list-artists',{attrs:{\"artists\":_vm.artists_list}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-audiobooks></tabs-audiobooks>\n\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"artists_list.indexList\"></index-button-list>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Authors</p>\n <p class=\"heading\">{{ artists_list.sortedAndFiltered.length }} Authors</p>\n </template>\n <template slot=\"heading-right\">\n </template>\n <template slot=\"content\">\n <list-artists :artists=\"artists_list\"></list-artists>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsAudiobooks from '@/components/TabsAudiobooks'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ListArtists from '@/components/ListArtists'\nimport webapi from '@/webapi'\nimport Artists from '@/lib/Artists'\n\nconst artistsData = {\n load: function (to) {\n return webapi.library_artists('audiobook')\n },\n\n set: function (vm, response) {\n vm.artists = response.data\n }\n}\n\nexport default {\n name: 'PageAudiobooksArtists',\n mixins: [LoadDataBeforeEnterMixin(artistsData)],\n components: { ContentWithHeading, TabsAudiobooks, IndexButtonList, ListArtists },\n\n data () {\n return {\n artists: { items: [] }\n }\n },\n\n computed: {\n artists_list () {\n return new Artists(this.artists.items, {\n sort: 'Name',\n group: true\n })\n }\n },\n\n methods: {\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAudiobooksArtists.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAudiobooksArtists.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageAudiobooksArtists.vue?vue&type=template&id=57e179cc&\"\nimport script from \"./PageAudiobooksArtists.vue?vue&type=script&lang=js&\"\nexport * from \"./PageAudiobooksArtists.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.artist.name))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_artist_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.artist.album_count)+\" albums\")]),_c('list-albums',{attrs:{\"albums\":_vm.albums.items}}),_c('modal-dialog-artist',{attrs:{\"show\":_vm.show_artist_details_modal,\"artist\":_vm.artist},on:{\"close\":function($event){_vm.show_artist_details_modal = false}}})],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ artist.name }}</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_artist_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ artist.album_count }} albums</p>\n <list-albums :albums=\"albums.items\"></list-albums>\n <modal-dialog-artist :show=\"show_artist_details_modal\" :artist=\"artist\" @close=\"show_artist_details_modal = false\" />\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListAlbums from '@/components/ListAlbums'\nimport ModalDialogArtist from '@/components/ModalDialogArtist'\nimport webapi from '@/webapi'\n\nconst artistData = {\n load: function (to) {\n return Promise.all([\n webapi.library_artist(to.params.artist_id),\n webapi.library_artist_albums(to.params.artist_id)\n ])\n },\n\n set: function (vm, response) {\n vm.artist = response[0].data\n vm.albums = response[1].data\n }\n}\n\nexport default {\n name: 'PageAudiobooksArtist',\n mixins: [LoadDataBeforeEnterMixin(artistData)],\n components: { ContentWithHeading, ListAlbums, ModalDialogArtist },\n\n data () {\n return {\n artist: {},\n albums: {},\n\n show_artist_details_modal: false\n }\n },\n\n methods: {\n play: function () {\n webapi.player_play_uri(this.albums.items.map(a => a.uri).join(','), false)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAudiobooksArtist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAudiobooksArtist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageAudiobooksArtist.vue?vue&type=template&id=1d8187dc&\"\nimport script from \"./PageAudiobooksArtist.vue?vue&type=script&lang=js&\"\nexport * from \"./PageAudiobooksArtist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-hero',[_c('template',{slot:\"heading-left\"},[_c('h1',{staticClass:\"title is-5\"},[_vm._v(_vm._s(_vm.album.name))]),_c('h2',{staticClass:\"subtitle is-6 has-text-link has-text-weight-normal\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.album.artist))])]),_c('div',{staticClass:\"buttons fd-is-centered-mobile fd-has-margin-top\"},[_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Play\")])]),_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_album_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])])])]),_c('template',{slot:\"heading-right\"},[_c('p',{staticClass:\"image is-square fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":_vm.album.artwork_url,\"artist\":_vm.album.artist,\"album\":_vm.album.name},on:{\"click\":function($event){_vm.show_album_details_modal = true}}})],1)]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading is-7 has-text-centered-mobile fd-has-margin-top\"},[_vm._v(_vm._s(_vm.album.track_count)+\" tracks\")]),_c('list-tracks',{attrs:{\"tracks\":_vm.tracks,\"uris\":_vm.album.uri}}),_c('modal-dialog-album',{attrs:{\"show\":_vm.show_album_details_modal,\"album\":_vm.album,\"media_kind\":'audiobook'},on:{\"close\":function($event){_vm.show_album_details_modal = false}}})],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <content-with-hero>\n <template slot=\"heading-left\">\n <h1 class=\"title is-5\">{{ album.name }}</h1>\n <h2 class=\"subtitle is-6 has-text-link has-text-weight-normal\"><a class=\"has-text-link\" @click=\"open_artist\">{{ album.artist }}</a></h2>\n\n <div class=\"buttons fd-is-centered-mobile fd-has-margin-top\">\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span>Play</span>\n </a>\n <a class=\"button is-small is-light is-rounded\" @click=\"show_album_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n </div>\n </template>\n <template slot=\"heading-right\">\n <p class=\"image is-square fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"album.artwork_url\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n @click=\"show_album_details_modal = true\" />\n </p>\n </template>\n <template slot=\"content\">\n <p class=\"heading is-7 has-text-centered-mobile fd-has-margin-top\">{{ album.track_count }} tracks</p>\n <list-tracks :tracks=\"tracks\" :uris=\"album.uri\"></list-tracks>\n <modal-dialog-album :show=\"show_album_details_modal\" :album=\"album\" :media_kind=\"'audiobook'\" @close=\"show_album_details_modal = false\" />\n </template>\n </content-with-hero>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHero from '@/templates/ContentWithHero'\nimport ListTracks from '@/components/ListTracks'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport webapi from '@/webapi'\n\nconst albumData = {\n load: function (to) {\n return Promise.all([\n webapi.library_album(to.params.album_id),\n webapi.library_album_tracks(to.params.album_id)\n ])\n },\n\n set: function (vm, response) {\n vm.album = response[0].data\n vm.tracks = response[1].data.items\n }\n}\n\nexport default {\n name: 'PageAudiobooksAlbum',\n mixins: [LoadDataBeforeEnterMixin(albumData)],\n components: { ContentWithHero, ListTracks, ModalDialogAlbum, CoverArtwork },\n\n data () {\n return {\n album: {},\n tracks: [],\n\n show_album_details_modal: false\n }\n },\n\n methods: {\n open_artist: function () {\n this.show_details_modal = false\n this.$router.push({ path: '/audiobooks/artists/' + this.album.artist_id })\n },\n\n play: function () {\n webapi.player_play_uri(this.album.uri, false)\n },\n\n play_track: function (position) {\n webapi.player_play_uri(this.album.uri, false, position)\n },\n\n open_dialog: function (track) {\n this.selected_track = track\n this.show_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAudiobooksAlbum.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAudiobooksAlbum.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageAudiobooksAlbum.vue?vue&type=template&id=efa1b7f2&\"\nimport script from \"./PageAudiobooksAlbum.vue?vue&type=script&lang=js&\"\nexport * from \"./PageAudiobooksAlbum.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.playlist.name))]),_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.playlists.total)+\" playlists\")])]),_c('template',{slot:\"content\"},[_c('list-playlists',{attrs:{\"playlists\":_vm.playlists.items}})],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._l((_vm.playlists),function(playlist){return _c('list-item-playlist',{key:playlist.id,attrs:{\"playlist\":playlist},on:{\"click\":function($event){return _vm.open_playlist(playlist)}}},[_c('template',{slot:\"icon\"},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi\",class:{ 'mdi-library-music': playlist.type !== 'folder', 'mdi-rss': playlist.type === 'rss', 'mdi-folder': playlist.type === 'folder' }})])]),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(playlist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('modal-dialog-playlist',{attrs:{\"show\":_vm.show_details_modal,\"playlist\":_vm.selected_playlist},on:{\"close\":function($event){_vm.show_details_modal = false}}})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\"},[(_vm.slots().icon)?_c('figure',{staticClass:\"media-left fd-has-action\",on:{\"click\":_vm.listeners.click}},[_vm._t(\"icon\")],2):_vm._e(),_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.listeners.click}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.props.playlist.name))])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template functional>\n <div class=\"media\">\n <figure class=\"media-left fd-has-action\" v-if=\"slots().icon\" @click=\"listeners.click\">\n <slot name=\"icon\"></slot>\n </figure>\n <div class=\"media-content fd-has-action is-clipped\" @click=\"listeners.click\">\n <h1 class=\"title is-6\">{{ props.playlist.name }}</h1>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'ListItemPlaylist',\n props: ['playlist']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemPlaylist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemPlaylist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListItemPlaylist.vue?vue&type=template&id=70e1d159&functional=true&\"\nimport script from \"./ListItemPlaylist.vue?vue&type=script&lang=js&\"\nexport * from \"./ListItemPlaylist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_playlist}},[_vm._v(_vm._s(_vm.playlist.name))])]),_c('div',{staticClass:\"content is-small\"},[_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Path\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.playlist.path))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Type\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.playlist.type))])])])]),(!_vm.playlist.folder)?_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])]):_vm._e()])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n <a class=\"has-text-link\" @click=\"open_playlist\">{{ playlist.name }}</a>\n </p>\n <div class=\"content is-small\">\n <p>\n <span class=\"heading\">Path</span>\n <span class=\"title is-6\">{{ playlist.path }}</span>\n </p>\n <p>\n <span class=\"heading\">Type</span>\n <span class=\"title is-6\">{{ playlist.type }}</span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\" v-if=\"!playlist.folder\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogPlaylist',\n props: ['show', 'playlist', 'uris'],\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_uri(this.uris ? this.uris : this.playlist.uri, false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_add(this.uris ? this.uris : this.playlist.uri)\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_add_next(this.uris ? this.uris : this.playlist.uri)\n },\n\n open_playlist: function () {\n this.$emit('close')\n this.$router.push({ path: '/playlists/' + this.playlist.id + '/tracks' })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogPlaylist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogPlaylist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogPlaylist.vue?vue&type=template&id=eed38c78&\"\nimport script from \"./ModalDialogPlaylist.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogPlaylist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <list-item-playlist v-for=\"playlist in playlists\" :key=\"playlist.id\" :playlist=\"playlist\" @click=\"open_playlist(playlist)\">\n <template slot=\"icon\">\n <span class=\"icon\">\n <i class=\"mdi\" :class=\"{ 'mdi-library-music': playlist.type !== 'folder', 'mdi-rss': playlist.type === 'rss', 'mdi-folder': playlist.type === 'folder' }\"></i>\n </span>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_dialog(playlist)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-playlist>\n <modal-dialog-playlist :show=\"show_details_modal\" :playlist=\"selected_playlist\" @close=\"show_details_modal = false\" />\n </div>\n</template>\n\n<script>\nimport ListItemPlaylist from '@/components/ListItemPlaylist'\nimport ModalDialogPlaylist from '@/components/ModalDialogPlaylist'\n\nexport default {\n name: 'ListPlaylists',\n components: { ListItemPlaylist, ModalDialogPlaylist },\n\n props: ['playlists'],\n\n data () {\n return {\n show_details_modal: false,\n selected_playlist: {}\n }\n },\n\n methods: {\n open_playlist: function (playlist) {\n if (playlist.type !== 'folder') {\n this.$router.push({ path: '/playlists/' + playlist.id + '/tracks' })\n } else {\n this.$router.push({ path: '/playlists/' + playlist.id })\n }\n },\n\n open_dialog: function (playlist) {\n this.selected_playlist = playlist\n this.show_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListPlaylists.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListPlaylists.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListPlaylists.vue?vue&type=template&id=cb1e7e92&\"\nimport script from \"./ListPlaylists.vue?vue&type=script&lang=js&\"\nexport * from \"./ListPlaylists.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ playlist.name }}</p>\n <p class=\"heading\">{{ playlists.total }} playlists</p>\n </template>\n <template slot=\"content\">\n <list-playlists :playlists=\"playlists.items\"></list-playlists>\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListPlaylists from '@/components/ListPlaylists'\nimport webapi from '@/webapi'\n\nconst playlistsData = {\n load: function (to) {\n return Promise.all([\n webapi.library_playlist(to.params.playlist_id),\n webapi.library_playlist_folder(to.params.playlist_id)\n ])\n },\n\n set: function (vm, response) {\n vm.playlist = response[0].data\n vm.playlists = response[1].data\n }\n}\n\nexport default {\n name: 'PagePlaylists',\n mixins: [LoadDataBeforeEnterMixin(playlistsData)],\n components: { ContentWithHeading, ListPlaylists },\n\n data () {\n return {\n playlist: {},\n playlists: {}\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PagePlaylists.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PagePlaylists.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PagePlaylists.vue?vue&type=template&id=3470ce91&\"\nimport script from \"./PagePlaylists.vue?vue&type=script&lang=js&\"\nexport * from \"./PagePlaylists.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.playlist.name))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_playlist_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.tracks.length)+\" tracks\")]),_c('list-tracks',{attrs:{\"tracks\":_vm.tracks,\"uris\":_vm.uris}}),_c('modal-dialog-playlist',{attrs:{\"show\":_vm.show_playlist_details_modal,\"playlist\":_vm.playlist,\"uris\":_vm.uris},on:{\"close\":function($event){_vm.show_playlist_details_modal = false}}})],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">{{ playlist.name }}</div>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_playlist_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ tracks.length }} tracks</p>\n <list-tracks :tracks=\"tracks\" :uris=\"uris\"></list-tracks>\n <modal-dialog-playlist :show=\"show_playlist_details_modal\" :playlist=\"playlist\" :uris=\"uris\" @close=\"show_playlist_details_modal = false\" />\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListTracks from '@/components/ListTracks'\nimport ModalDialogPlaylist from '@/components/ModalDialogPlaylist'\nimport webapi from '@/webapi'\n\nconst playlistData = {\n load: function (to) {\n return Promise.all([\n webapi.library_playlist(to.params.playlist_id),\n webapi.library_playlist_tracks(to.params.playlist_id)\n ])\n },\n\n set: function (vm, response) {\n vm.playlist = response[0].data\n vm.tracks = response[1].data.items\n }\n}\n\nexport default {\n name: 'PagePlaylist',\n mixins: [LoadDataBeforeEnterMixin(playlistData)],\n components: { ContentWithHeading, ListTracks, ModalDialogPlaylist },\n\n data () {\n return {\n playlist: {},\n tracks: [],\n\n show_playlist_details_modal: false\n }\n },\n\n computed: {\n uris () {\n if (this.playlist.random) {\n return this.tracks.map(a => a.uri).join(',')\n }\n return this.playlist.uri\n }\n },\n\n methods: {\n play: function () {\n webapi.player_play_uri(this.uris, true)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PagePlaylist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PagePlaylist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PagePlaylist.vue?vue&type=template&id=71750814&\"\nimport script from \"./PagePlaylist.vue?vue&type=script&lang=js&\"\nexport * from \"./PagePlaylist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Files\")]),_c('p',{staticClass:\"title is-7 has-text-grey\"},[_vm._v(_vm._s(_vm.current_directory))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){return _vm.open_directory_dialog({ 'path': _vm.current_directory })}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Play\")])])])]),_c('template',{slot:\"content\"},[(_vm.$route.query.directory)?_c('div',{staticClass:\"media\",on:{\"click\":function($event){return _vm.open_parent_directory()}}},[_c('figure',{staticClass:\"media-left fd-has-action\"},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-subdirectory-arrow-left\"})])]),_c('div',{staticClass:\"media-content fd-has-action is-clipped\"},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(\"..\")])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)]):_vm._e(),_vm._l((_vm.files.directories),function(directory){return _c('list-item-directory',{key:directory.path,attrs:{\"directory\":directory},on:{\"click\":function($event){return _vm.open_directory(directory)}}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_directory_dialog(directory)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_vm._l((_vm.files.playlists.items),function(playlist){return _c('list-item-playlist',{key:playlist.id,attrs:{\"playlist\":playlist},on:{\"click\":function($event){return _vm.open_playlist(playlist)}}},[_c('template',{slot:\"icon\"},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-library-music\"})])]),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_playlist_dialog(playlist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_vm._l((_vm.files.tracks.items),function(track,index){return _c('list-item-track',{key:track.id,attrs:{\"track\":track},on:{\"click\":function($event){return _vm.play_track(index)}}},[_c('template',{slot:\"icon\"},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-file-outline\"})])]),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_track_dialog(track)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('modal-dialog-directory',{attrs:{\"show\":_vm.show_directory_details_modal,\"directory\":_vm.selected_directory},on:{\"close\":function($event){_vm.show_directory_details_modal = false}}}),_c('modal-dialog-playlist',{attrs:{\"show\":_vm.show_playlist_details_modal,\"playlist\":_vm.selected_playlist},on:{\"close\":function($event){_vm.show_playlist_details_modal = false}}}),_c('modal-dialog-track',{attrs:{\"show\":_vm.show_track_details_modal,\"track\":_vm.selected_track},on:{\"close\":function($event){_vm.show_track_details_modal = false}}})],2)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\"},[_c('figure',{staticClass:\"media-left fd-has-action\",on:{\"click\":_vm.listeners.click}},[_vm._m(0)]),_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.listeners.click}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.props.directory.path.substring(_vm.props.directory.path.lastIndexOf('/') + 1)))]),_c('h2',{staticClass:\"subtitle is-7 has-text-grey-light\"},[_vm._v(_vm._s(_vm.props.directory.path))])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = [function (_h,_vm) {var _c=_vm._c;return _c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-folder\"})])}]\n\nexport { render, staticRenderFns }","<template functional>\n <div class=\"media\">\n <figure class=\"media-left fd-has-action\" @click=\"listeners.click\">\n <span class=\"icon\">\n <i class=\"mdi mdi-folder\"></i>\n </span>\n </figure>\n <div class=\"media-content fd-has-action is-clipped\" @click=\"listeners.click\">\n <h1 class=\"title is-6\">{{ props.directory.path.substring(props.directory.path.lastIndexOf('/') + 1) }}</h1>\n <h2 class=\"subtitle is-7 has-text-grey-light\">{{ props.directory.path }}</h2>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'ListItemDirectory',\n props: ['directory']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemDirectory.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemDirectory.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListItemDirectory.vue?vue&type=template&id=fc5a981a&functional=true&\"\nimport script from \"./ListItemDirectory.vue?vue&type=script&lang=js&\"\nexport * from \"./ListItemDirectory.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\" \"+_vm._s(_vm.directory.path)+\" \")])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n {{ directory.path }}\n </p>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogDirectory',\n props: ['show', 'directory'],\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_expression('path starts with \"' + this.directory.path + '\" order by path asc', false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_expression_add('path starts with \"' + this.directory.path + '\" order by path asc')\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_expression_add_next('path starts with \"' + this.directory.path + '\" order by path asc')\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogDirectory.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogDirectory.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogDirectory.vue?vue&type=template&id=47bd3efd&\"\nimport script from \"./ModalDialogDirectory.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogDirectory.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Files</p>\n <p class=\"title is-7 has-text-grey\">{{ current_directory }}</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"open_directory_dialog({ 'path': current_directory })\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span>Play</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <div class=\"media\" v-if=\"$route.query.directory\" @click=\"open_parent_directory()\">\n <figure class=\"media-left fd-has-action\">\n <span class=\"icon\">\n <i class=\"mdi mdi-subdirectory-arrow-left\"></i>\n </span>\n </figure>\n <div class=\"media-content fd-has-action is-clipped\">\n <h1 class=\"title is-6\">..</h1>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n\n <list-item-directory v-for=\"directory in files.directories\" :key=\"directory.path\" :directory=\"directory\" @click=\"open_directory(directory)\">\n <template slot=\"actions\">\n <a @click=\"open_directory_dialog(directory)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-directory>\n\n <list-item-playlist v-for=\"playlist in files.playlists.items\" :key=\"playlist.id\" :playlist=\"playlist\" @click=\"open_playlist(playlist)\">\n <template slot=\"icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-library-music\"></i>\n </span>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_playlist_dialog(playlist)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-playlist>\n\n <list-item-track v-for=\"(track, index) in files.tracks.items\" :key=\"track.id\" :track=\"track\" @click=\"play_track(index)\">\n <template slot=\"icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-file-outline\"></i>\n </span>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_track_dialog(track)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-track>\n\n <modal-dialog-directory :show=\"show_directory_details_modal\" :directory=\"selected_directory\" @close=\"show_directory_details_modal = false\" />\n <modal-dialog-playlist :show=\"show_playlist_details_modal\" :playlist=\"selected_playlist\" @close=\"show_playlist_details_modal = false\" />\n <modal-dialog-track :show=\"show_track_details_modal\" :track=\"selected_track\" @close=\"show_track_details_modal = false\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListItemDirectory from '@/components/ListItemDirectory'\nimport ListItemPlaylist from '@/components/ListItemPlaylist'\nimport ListItemTrack from '@/components/ListItemTrack'\nimport ModalDialogDirectory from '@/components/ModalDialogDirectory'\nimport ModalDialogPlaylist from '@/components/ModalDialogPlaylist'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\nimport webapi from '@/webapi'\n\nconst filesData = {\n load: function (to) {\n if (to.query.directory) {\n return webapi.library_files(to.query.directory)\n }\n return Promise.resolve()\n },\n\n set: function (vm, response) {\n if (response) {\n vm.files = response.data\n } else {\n vm.files = {\n directories: vm.$store.state.config.directories.map(dir => { return { path: dir } }),\n tracks: { items: [] },\n playlists: { items: [] }\n }\n }\n }\n}\n\nexport default {\n name: 'PageFiles',\n mixins: [LoadDataBeforeEnterMixin(filesData)],\n components: { ContentWithHeading, ListItemDirectory, ListItemPlaylist, ListItemTrack, ModalDialogDirectory, ModalDialogPlaylist, ModalDialogTrack },\n\n data () {\n return {\n files: { directories: [], tracks: { items: [] }, playlists: { items: [] } },\n\n show_directory_details_modal: false,\n selected_directory: {},\n\n show_playlist_details_modal: false,\n selected_playlist: {},\n\n show_track_details_modal: false,\n selected_track: {}\n }\n },\n\n computed: {\n current_directory () {\n if (this.$route.query && this.$route.query.directory) {\n return this.$route.query.directory\n }\n return '/'\n }\n },\n\n methods: {\n open_parent_directory: function () {\n const parent = this.current_directory.slice(0, this.current_directory.lastIndexOf('/'))\n if (parent === '' || this.$store.state.config.directories.includes(this.current_directory)) {\n this.$router.push({ path: '/files' })\n } else {\n this.$router.push({ path: '/files', query: { directory: this.current_directory.slice(0, this.current_directory.lastIndexOf('/')) } })\n }\n },\n\n open_directory: function (directory) {\n this.$router.push({ path: '/files', query: { directory: directory.path } })\n },\n\n open_directory_dialog: function (directory) {\n this.selected_directory = directory\n this.show_directory_details_modal = true\n },\n\n play: function () {\n webapi.player_play_expression('path starts with \"' + this.current_directory + '\" order by path asc', false)\n },\n\n play_track: function (position) {\n webapi.player_play_uri(this.files.tracks.items.map(a => a.uri).join(','), false, position)\n },\n\n open_track_dialog: function (track) {\n this.selected_track = track\n this.show_track_details_modal = true\n },\n\n open_playlist: function (playlist) {\n this.$router.push({ path: '/playlists/' + playlist.id + '/tracks' })\n },\n\n open_playlist_dialog: function (playlist) {\n this.selected_playlist = playlist\n this.show_playlist_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageFiles.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageFiles.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageFiles.vue?vue&type=template&id=52f9641a&\"\nimport script from \"./PageFiles.vue?vue&type=script&lang=js&\"\nexport * from \"./PageFiles.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Radio\")])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.tracks.total)+\" tracks\")]),_c('list-tracks',{attrs:{\"tracks\":_vm.tracks.items}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Radio</p>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ tracks.total }} tracks</p>\n <list-tracks :tracks=\"tracks.items\"></list-tracks>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListTracks from '@/components/ListTracks'\nimport webapi from '@/webapi'\n\nconst streamsData = {\n load: function (to) {\n return webapi.library_radio_streams()\n },\n\n set: function (vm, response) {\n vm.tracks = response.data.tracks\n }\n}\n\nexport default {\n name: 'PageRadioStreams',\n mixins: [LoadDataBeforeEnterMixin(streamsData)],\n components: { ContentWithHeading, ListTracks },\n\n data () {\n return {\n tracks: { items: [] }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageRadioStreams.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageRadioStreams.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageRadioStreams.vue?vue&type=template&id=6286e82d&\"\nimport script from \"./PageRadioStreams.vue?vue&type=script&lang=js&\"\nexport * from \"./PageRadioStreams.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('section',{staticClass:\"section fd-remove-padding-bottom\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.new_search.apply(null, arguments)}}},[_c('div',{staticClass:\"field\"},[_c('p',{staticClass:\"control is-expanded has-icons-left\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.search_query),expression:\"search_query\"}],ref:\"search_field\",staticClass:\"input is-rounded is-shadowless\",attrs:{\"type\":\"text\",\"placeholder\":\"Search\",\"autocomplete\":\"off\"},domProps:{\"value\":(_vm.search_query)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.search_query=$event.target.value}}}),_vm._m(0)]),_vm._m(1)])]),_c('div',{staticClass:\"tags\",staticStyle:{\"margin-top\":\"16px\"}},_vm._l((_vm.recent_searches),function(recent_search){return _c('a',{key:recent_search,staticClass:\"tag\",on:{\"click\":function($event){return _vm.open_recent_search(recent_search)}}},[_vm._v(_vm._s(recent_search))])}),0)])])])]),_c('tabs-search',{attrs:{\"query\":_vm.search_query}}),(_vm.show_tracks && _vm.tracks.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Tracks\")])]),_c('template',{slot:\"content\"},[_c('list-tracks',{attrs:{\"tracks\":_vm.tracks.items}})],1),_c('template',{slot:\"footer\"},[(_vm.show_all_tracks_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_tracks}},[_vm._v(\"Show all \"+_vm._s(_vm.tracks.total.toLocaleString())+\" tracks\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_tracks && !_vm.tracks.total)?_c('content-text',{staticClass:\"mt-6\"},[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No tracks found\")])])])],2):_vm._e(),(_vm.show_artists && _vm.artists.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Artists\")])]),_c('template',{slot:\"content\"},[_c('list-artists',{attrs:{\"artists\":_vm.artists.items}})],1),_c('template',{slot:\"footer\"},[(_vm.show_all_artists_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_artists}},[_vm._v(\"Show all \"+_vm._s(_vm.artists.total.toLocaleString())+\" artists\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_artists && !_vm.artists.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No artists found\")])])])],2):_vm._e(),(_vm.show_albums && _vm.albums.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Albums\")])]),_c('template',{slot:\"content\"},[_c('list-albums',{attrs:{\"albums\":_vm.albums.items}})],1),_c('template',{slot:\"footer\"},[(_vm.show_all_albums_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_albums}},[_vm._v(\"Show all \"+_vm._s(_vm.albums.total.toLocaleString())+\" albums\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_albums && !_vm.albums.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No albums found\")])])])],2):_vm._e(),(_vm.show_composers && _vm.composers.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Composers\")])]),_c('template',{slot:\"content\"},[_c('list-composers',{attrs:{\"composers\":_vm.composers.items}})],1),_c('template',{slot:\"footer\"},[(_vm.show_all_composers_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_composers}},[_vm._v(\"Show all \"+_vm._s(_vm.composers.total)+\" composers\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_composers && !_vm.composers.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No composers found\")])])])],2):_vm._e(),(_vm.show_playlists && _vm.playlists.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Playlists\")])]),_c('template',{slot:\"content\"},[_c('list-playlists',{attrs:{\"playlists\":_vm.playlists.items}})],1),_c('template',{slot:\"footer\"},[(_vm.show_all_playlists_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_playlists}},[_vm._v(\"Show all \"+_vm._s(_vm.playlists.total.toLocaleString())+\" playlists\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_playlists && !_vm.playlists.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No playlists found\")])])])],2):_vm._e(),(_vm.show_podcasts && _vm.podcasts.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Podcasts\")])]),_c('template',{slot:\"content\"},[_c('list-albums',{attrs:{\"albums\":_vm.podcasts.items}})],1),_c('template',{slot:\"footer\"},[(_vm.show_all_podcasts_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_podcasts}},[_vm._v(\"Show all \"+_vm._s(_vm.podcasts.total.toLocaleString())+\" podcasts\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_podcasts && !_vm.podcasts.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No podcasts found\")])])])],2):_vm._e(),(_vm.show_audiobooks && _vm.audiobooks.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Audiobooks\")])]),_c('template',{slot:\"content\"},[_c('list-albums',{attrs:{\"albums\":_vm.audiobooks.items}})],1),_c('template',{slot:\"footer\"},[(_vm.show_all_audiobooks_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_audiobooks}},[_vm._v(\"Show all \"+_vm._s(_vm.audiobooks.total.toLocaleString())+\" audiobooks\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_audiobooks && !_vm.audiobooks.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No audiobooks found\")])])])],2):_vm._e()],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon is-left\"},[_c('i',{staticClass:\"mdi mdi-magnify\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('p',{staticClass:\"help has-text-centered\"},[_vm._v(\"Tip: you can search by a smart playlist query language \"),_c('a',{attrs:{\"href\":\"https://github.com/owntone/owntone-server/blob/master/README_SMARTPL.md\",\"target\":\"_blank\"}},[_vm._v(\"expression\")]),_vm._v(\" if you prefix it with \"),_c('code',[_vm._v(\"query:\")]),_vm._v(\". \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"section fd-content py-3\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_vm._t(\"content\")],2)])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section class=\"section fd-content py-3\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <slot name=\"content\"></slot>\n </div>\n </div>\n </div>\n </section>\n</template>\n\n<script>\nexport default {\n name: 'ContentText'\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ContentText.vue?vue&type=template&id=bfc5ab0a&\"\nimport script from \"./ContentText.vue?vue&type=script&lang=js&\"\nexport * from \"./ContentText.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.spotify_enabled)?_c('section',{staticClass:\"section fd-remove-padding-bottom\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('div',{staticClass:\"tabs is-centered is-small is-toggle is-toggle-rounded\"},[_c('ul',[_c('li',{class:{ 'is-active': _vm.$route.path === '/search/library' }},[_c('a',{on:{\"click\":_vm.search_library}},[_vm._m(0),_c('span',{},[_vm._v(\"Library\")])])]),_c('li',{class:{ 'is-active': _vm.$route.path === '/search/spotify' }},[_c('a',{on:{\"click\":_vm.search_spotify}},[_vm._m(1),_c('span',{},[_vm._v(\"Spotify\")])])])])])])])])]):_vm._e()}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-library-books\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-spotify\"})])}]\n\nexport { render, staticRenderFns }","<template>\n <section class=\"section fd-remove-padding-bottom\" v-if=\"spotify_enabled\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <div class=\"tabs is-centered is-small is-toggle is-toggle-rounded\">\n <ul>\n <li :class=\"{ 'is-active': $route.path === '/search/library' }\">\n <a @click=\"search_library\">\n <span class=\"icon is-small\"><i class=\"mdi mdi-library-books\"></i></span>\n <span class=\"\">Library</span>\n </a>\n </li>\n <li :class=\"{ 'is-active': $route.path === '/search/spotify' }\">\n <a @click=\"search_spotify\">\n <span class=\"icon is-small\"><i class=\"mdi mdi-spotify\"></i></span>\n <span class=\"\">Spotify</span>\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </section>\n</template>\n\n<script>\nexport default {\n name: 'TabsSearch',\n\n props: ['query'],\n\n computed: {\n spotify_enabled () {\n return this.$store.state.spotify.webapi_token_valid\n },\n\n route_query: function () {\n if (!this.query) {\n return null\n }\n\n return {\n type: 'track,artist,album,playlist,audiobook,podcast',\n query: this.query,\n limit: 3,\n offset: 0\n }\n }\n },\n\n methods: {\n search_library: function () {\n this.$router.push({\n path: '/search/library',\n query: this.route_query\n })\n },\n\n search_spotify: function () {\n this.$router.push({\n path: '/search/spotify',\n query: this.route_query\n })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsSearch.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsSearch.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TabsSearch.vue?vue&type=template&id=3392045a&\"\nimport script from \"./TabsSearch.vue?vue&type=script&lang=js&\"\nexport * from \"./TabsSearch.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <!-- Search field + recent searches -->\n <section class=\"section fd-remove-padding-bottom\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <form v-on:submit.prevent=\"new_search\">\n <div class=\"field\">\n <p class=\"control is-expanded has-icons-left\">\n <input class=\"input is-rounded is-shadowless\" type=\"text\" placeholder=\"Search\" v-model=\"search_query\" ref=\"search_field\" autocomplete=\"off\">\n <span class=\"icon is-left\">\n <i class=\"mdi mdi-magnify\"></i>\n </span>\n </p>\n <p class=\"help has-text-centered\">Tip: you can search by a smart playlist query language <a href=\"https://github.com/owntone/owntone-server/blob/master/README_SMARTPL.md\" target=\"_blank\">expression</a> if you prefix it\n with <code>query:</code>.\n </p>\n </div>\n </form>\n <div class=\"tags\" style=\"margin-top: 16px;\">\n <a class=\"tag\" v-for=\"recent_search in recent_searches\" :key=\"recent_search\" @click=\"open_recent_search(recent_search)\">{{ recent_search }}</a>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <tabs-search :query=\"search_query\"></tabs-search>\n\n <!-- Tracks -->\n <content-with-heading v-if=\"show_tracks && tracks.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Tracks</p>\n </template>\n <template slot=\"content\">\n <list-tracks :tracks=\"tracks.items\"></list-tracks>\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_tracks_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_tracks\">Show all {{ tracks.total.toLocaleString() }} tracks</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_tracks && !tracks.total\" class=\"mt-6\">\n <template slot=\"content\">\n <p><i>No tracks found</i></p>\n </template>\n </content-text>\n\n <!-- Artists -->\n <content-with-heading v-if=\"show_artists && artists.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Artists</p>\n </template>\n <template slot=\"content\">\n <list-artists :artists=\"artists.items\"></list-artists>\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_artists_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_artists\">Show all {{ artists.total.toLocaleString() }} artists</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_artists && !artists.total\">\n <template slot=\"content\">\n <p><i>No artists found</i></p>\n </template>\n </content-text>\n\n <!-- Albums -->\n <content-with-heading v-if=\"show_albums && albums.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Albums</p>\n </template>\n <template slot=\"content\">\n <list-albums :albums=\"albums.items\"></list-albums>\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_albums_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_albums\">Show all {{ albums.total.toLocaleString() }} albums</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_albums && !albums.total\">\n <template slot=\"content\">\n <p><i>No albums found</i></p>\n </template>\n </content-text>\n\n <!-- Composers -->\n <content-with-heading v-if=\"show_composers && composers.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Composers</p>\n </template>\n <template slot=\"content\">\n <list-composers :composers=\"composers.items\"></list-composers>\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_composers_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_composers\">Show all {{ composers.total }} composers</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_composers && !composers.total\">\n <template slot=\"content\">\n <p><i>No composers found</i></p>\n </template>\n </content-text>\n\n <!-- Playlists -->\n <content-with-heading v-if=\"show_playlists && playlists.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Playlists</p>\n </template>\n <template slot=\"content\">\n <list-playlists :playlists=\"playlists.items\"></list-playlists>\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_playlists_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_playlists\">Show all {{ playlists.total.toLocaleString() }} playlists</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_playlists && !playlists.total\">\n <template slot=\"content\">\n <p><i>No playlists found</i></p>\n </template>\n </content-text>\n\n <!-- Podcasts -->\n <content-with-heading v-if=\"show_podcasts && podcasts.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Podcasts</p>\n </template>\n <template slot=\"content\">\n <list-albums :albums=\"podcasts.items\"></list-albums>\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_podcasts_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_podcasts\">Show all {{ podcasts.total.toLocaleString() }} podcasts</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_podcasts && !podcasts.total\">\n <template slot=\"content\">\n <p><i>No podcasts found</i></p>\n </template>\n </content-text>\n\n <!-- Audiobooks -->\n <content-with-heading v-if=\"show_audiobooks && audiobooks.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Audiobooks</p>\n </template>\n <template slot=\"content\">\n <list-albums :albums=\"audiobooks.items\"></list-albums>\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_audiobooks_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_audiobooks\">Show all {{ audiobooks.total.toLocaleString() }} audiobooks</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_audiobooks && !audiobooks.total\">\n <template slot=\"content\">\n <p><i>No audiobooks found</i></p>\n </template>\n </content-text>\n </div>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ContentText from '@/templates/ContentText'\nimport TabsSearch from '@/components/TabsSearch'\nimport ListTracks from '@/components/ListTracks'\nimport ListArtists from '@/components/ListArtists'\nimport ListAlbums from '@/components/ListAlbums'\nimport ListComposers from '@/components/ListComposers'\nimport ListPlaylists from '@/components/ListPlaylists'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'PageSearch',\n components: { ContentWithHeading, ContentText, TabsSearch, ListTracks, ListArtists, ListAlbums, ListPlaylists, ListComposers },\n\n data () {\n return {\n search_query: '',\n\n tracks: { items: [], total: 0 },\n artists: { items: [], total: 0 },\n albums: { items: [], total: 0 },\n composers: { items: [], total: 0 },\n playlists: { items: [], total: 0 },\n audiobooks: { items: [], total: 0 },\n podcasts: { items: [], total: 0 }\n }\n },\n\n computed: {\n recent_searches () {\n return this.$store.state.recent_searches\n },\n\n show_tracks () {\n return this.$route.query.type && this.$route.query.type.includes('track')\n },\n show_all_tracks_button () {\n return this.tracks.total > this.tracks.items.length\n },\n\n show_artists () {\n return this.$route.query.type && this.$route.query.type.includes('artist')\n },\n show_all_artists_button () {\n return this.artists.total > this.artists.items.length\n },\n\n show_albums () {\n return this.$route.query.type && this.$route.query.type.includes('album')\n },\n show_all_albums_button () {\n return this.albums.total > this.albums.items.length\n },\n\n show_composers () {\n return this.$route.query.type && this.$route.query.type.includes('composer')\n },\n show_all_composers_button () {\n return this.composers.total > this.composers.items.length\n },\n\n show_playlists () {\n return this.$route.query.type && this.$route.query.type.includes('playlist')\n },\n show_all_playlists_button () {\n return this.playlists.total > this.playlists.items.length\n },\n\n show_audiobooks () {\n return this.$route.query.type && this.$route.query.type.includes('audiobook')\n },\n show_all_audiobooks_button () {\n return this.audiobooks.total > this.audiobooks.items.length\n },\n\n show_podcasts () {\n return this.$route.query.type && this.$route.query.type.includes('podcast')\n },\n show_all_podcasts_button () {\n return this.podcasts.total > this.podcasts.items.length\n },\n\n is_visible_artwork () {\n return this.$store.getters.settings_option('webinterface', 'show_cover_artwork_in_album_lists').value\n }\n },\n\n methods: {\n search: function (route) {\n if (!route.query.query || route.query.query === '') {\n this.search_query = ''\n this.$refs.search_field.focus()\n return\n }\n\n this.search_query = route.query.query\n this.searchMusic(route.query)\n this.searchAudiobooks(route.query)\n this.searchPodcasts(route.query)\n this.$store.commit(types.ADD_RECENT_SEARCH, route.query.query)\n },\n\n searchMusic: function (query) {\n if (query.type.indexOf('track') < 0 && query.type.indexOf('artist') < 0 && query.type.indexOf('album') < 0 && query.type.indexOf('playlist') < 0) {\n return\n }\n\n const searchParams = {\n type: query.type,\n media_kind: 'music'\n }\n\n if (query.query.startsWith('query:')) {\n searchParams.expression = query.query.replace(/^query:/, '').trim()\n } else {\n searchParams.query = query.query\n }\n\n if (query.limit) {\n searchParams.limit = query.limit\n searchParams.offset = query.offset\n }\n\n webapi.search(searchParams).then(({ data }) => {\n this.tracks = data.tracks ? data.tracks : { items: [], total: 0 }\n this.artists = data.artists ? data.artists : { items: [], total: 0 }\n this.albums = data.albums ? data.albums : { items: [], total: 0 }\n this.composers = data.composers ? data.composers : { items: [], total: 0 }\n this.playlists = data.playlists ? data.playlists : { items: [], total: 0 }\n })\n },\n\n searchAudiobooks: function (query) {\n if (query.type.indexOf('audiobook') < 0) {\n return\n }\n\n const searchParams = {\n type: 'album',\n media_kind: 'audiobook'\n }\n\n if (query.query.startsWith('query:')) {\n searchParams.expression = query.query.replace(/^query:/, '').trim()\n } else {\n searchParams.expression = '((album includes \"' + query.query + '\" or artist includes \"' + query.query + '\") and media_kind is audiobook)'\n }\n\n if (query.limit) {\n searchParams.limit = query.limit\n searchParams.offset = query.offset\n }\n\n webapi.search(searchParams).then(({ data }) => {\n this.audiobooks = data.albums ? data.albums : { items: [], total: 0 }\n })\n },\n\n searchPodcasts: function (query) {\n if (query.type.indexOf('podcast') < 0) {\n return\n }\n\n const searchParams = {\n type: 'album',\n media_kind: 'podcast'\n }\n\n if (query.query.startsWith('query:')) {\n searchParams.expression = query.query.replace(/^query:/, '').trim()\n } else {\n searchParams.expression = '((album includes \"' + query.query + '\" or artist includes \"' + query.query + '\") and media_kind is podcast)'\n }\n\n if (query.limit) {\n searchParams.limit = query.limit\n searchParams.offset = query.offset\n }\n\n webapi.search(searchParams).then(({ data }) => {\n this.podcasts = data.albums ? data.albums : { items: [], total: 0 }\n })\n },\n\n new_search: function () {\n if (!this.search_query) {\n return\n }\n\n this.$router.push({\n path: '/search/library',\n query: {\n type: 'track,artist,album,playlist,audiobook,podcast,composer',\n query: this.search_query,\n limit: 3,\n offset: 0\n }\n })\n this.$refs.search_field.blur()\n },\n\n open_search_tracks: function () {\n this.$router.push({\n path: '/search/library',\n query: {\n type: 'track',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_artists: function () {\n this.$router.push({\n path: '/search/library',\n query: {\n type: 'artist',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_albums: function () {\n this.$router.push({\n path: '/search/library',\n query: {\n type: 'album',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_composers: function () {\n this.$router.push({\n path: '/search/library',\n query: {\n type: 'tracks',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_playlists: function () {\n this.$router.push({\n path: '/search/library',\n query: {\n type: 'playlist',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_audiobooks: function () {\n this.$router.push({\n path: '/search/library',\n query: {\n type: 'audiobook',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_podcasts: function () {\n this.$router.push({\n path: '/search/library',\n query: {\n type: 'podcast',\n query: this.$route.query.query\n }\n })\n },\n\n open_composer: function (composer) {\n this.$router.push({ name: 'ComposerAlbums', params: { composer: composer.name } })\n },\n\n open_playlist: function (playlist) {\n this.$router.push({ path: '/playlists/' + playlist.id + '/tracks' })\n },\n\n open_recent_search: function (query) {\n this.search_query = query\n this.new_search()\n },\n\n open_track_dialog: function (track) {\n this.selected_track = track\n this.show_track_details_modal = true\n },\n\n open_album_dialog: function (album) {\n this.selected_album = album\n this.show_album_details_modal = true\n },\n\n open_artist_dialog: function (artist) {\n this.selected_artist = artist\n this.show_artist_details_modal = true\n },\n\n open_composer_dialog: function (composer) {\n this.selected_composer = composer\n this.show_composer_details_modal = true\n },\n\n open_playlist_dialog: function (playlist) {\n this.selected_playlist = playlist\n this.show_playlist_details_modal = true\n }\n },\n\n mounted: function () {\n this.search(this.$route)\n },\n\n watch: {\n '$route' (to, from) {\n this.search(to)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageSearch.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageSearch.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageSearch.vue?vue&type=template&id=50c7b5c0&\"\nimport script from \"./PageSearch.vue?vue&type=script&lang=js&\"\nexport * from \"./PageSearch.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('section',{staticClass:\"section\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths has-text-centered-mobile\"},[_c('p',{staticClass:\"heading\"},[_c('b',[_vm._v(\"OwnTone\")]),_vm._v(\" - version \"+_vm._s(_vm.config.version))]),_c('h1',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.config.library_name))])])])])]),_c('section',{staticClass:\"section\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('div',{staticClass:\"content\"},[_c('nav',{staticClass:\"level is-mobile\"},[_vm._m(0),_c('div',{staticClass:\"level-right\"},[(_vm.library.updating)?_c('div',[_c('a',{staticClass:\"button is-small is-loading\"},[_vm._v(\"Update\")])]):_c('div',[_c('a',{staticClass:\"button is-small\",on:{\"click\":function($event){return _vm.showUpdateDialog()}}},[_vm._v(\"Update\")])])])]),_c('table',{staticClass:\"table\"},[_c('tbody',[_c('tr',[_c('th',[_vm._v(\"Artists\")]),_c('td',{staticClass:\"has-text-right\"},[_vm._v(_vm._s(_vm._f(\"number\")(_vm.library.artists)))])]),_c('tr',[_c('th',[_vm._v(\"Albums\")]),_c('td',{staticClass:\"has-text-right\"},[_vm._v(_vm._s(_vm._f(\"number\")(_vm.library.albums)))])]),_c('tr',[_c('th',[_vm._v(\"Tracks\")]),_c('td',{staticClass:\"has-text-right\"},[_vm._v(_vm._s(_vm._f(\"number\")(_vm.library.songs)))])]),_c('tr',[_c('th',[_vm._v(\"Total playtime\")]),_c('td',{staticClass:\"has-text-right\"},[_vm._v(_vm._s(_vm._f(\"duration\")(_vm.library.db_playtime * 1000,'y [years], d [days], h [hours], m [minutes]')))])]),_c('tr',[_c('th',[_vm._v(\"Library updated\")]),_c('td',{staticClass:\"has-text-right\"},[_vm._v(_vm._s(_vm._f(\"timeFromNow\")(_vm.library.updated_at))+\" \"),_c('span',{staticClass:\"has-text-grey\"},[_vm._v(\"(\"+_vm._s(_vm._f(\"time\")(_vm.library.updated_at,'lll'))+\")\")])])]),_c('tr',[_c('th',[_vm._v(\"Uptime\")]),_c('td',{staticClass:\"has-text-right\"},[_vm._v(_vm._s(_vm._f(\"timeFromNow\")(_vm.library.started_at,true))+\" \"),_c('span',{staticClass:\"has-text-grey\"},[_vm._v(\"(\"+_vm._s(_vm._f(\"time\")(_vm.library.started_at,'ll'))+\")\")])])])])])])])])])]),_c('section',{staticClass:\"section\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('div',{staticClass:\"content has-text-centered-mobile\"},[_c('p',{staticClass:\"is-size-7\"},[_vm._v(\"Compiled with support for \"+_vm._s(_vm._f(\"join\")(_vm.config.buildoptions))+\".\")]),_vm._m(1)])])])])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"level-left\"},[_c('div',{staticClass:\"level-item\"},[_c('h2',{staticClass:\"title is-5\"},[_vm._v(\"Library\")])])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('p',{staticClass:\"is-size-7\"},[_vm._v(\"Web interface built with \"),_c('a',{attrs:{\"href\":\"http://bulma.io\"}},[_vm._v(\"Bulma\")]),_vm._v(\", \"),_c('a',{attrs:{\"href\":\"https://materialdesignicons.com/\"}},[_vm._v(\"Material Design Icons\")]),_vm._v(\", \"),_c('a',{attrs:{\"href\":\"https://vuejs.org/\"}},[_vm._v(\"Vue.js\")]),_vm._v(\", \"),_c('a',{attrs:{\"href\":\"https://github.com/mzabriskie/axios\"}},[_vm._v(\"axios\")]),_vm._v(\" and \"),_c('a',{attrs:{\"href\":\"https://github.com/owntone/owntone-server/network/dependencies\"}},[_vm._v(\"more\")]),_vm._v(\".\")])}]\n\nexport { render, staticRenderFns }","<template>\n <div>\n <section class=\"section\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths has-text-centered-mobile\">\n <p class=\"heading\"><b>OwnTone</b> - version {{ config.version }}</p>\n <h1 class=\"title is-4\">{{ config.library_name }}</h1>\n </div>\n </div>\n </div>\n </section>\n <section class=\"section\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <div class=\"content\">\n <nav class=\"level is-mobile\">\n <!-- Left side -->\n <div class=\"level-left\">\n <div class=\"level-item\">\n <h2 class=\"title is-5\">Library</h2>\n </div>\n </div>\n\n <!-- Right side -->\n <div class=\"level-right\">\n <div v-if=\"library.updating\"><a class=\"button is-small is-loading\">Update</a></div>\n <div v-else><a @click=\"showUpdateDialog()\" class=\"button is-small\">Update</a></div>\n </div>\n </nav>\n\n <table class=\"table\">\n <tbody>\n <tr>\n <th>Artists</th>\n <td class=\"has-text-right\">{{ library.artists | number }}</td>\n </tr>\n <tr>\n <th>Albums</th>\n <td class=\"has-text-right\">{{ library.albums | number }}</td>\n </tr>\n <tr>\n <th>Tracks</th>\n <td class=\"has-text-right\">{{ library.songs | number }}</td>\n </tr>\n <tr>\n <th>Total playtime</th>\n <td class=\"has-text-right\">{{ library.db_playtime * 1000 | duration('y [years], d [days], h [hours], m [minutes]') }}</td>\n </tr>\n <tr>\n <th>Library updated</th>\n <td class=\"has-text-right\">{{ library.updated_at | timeFromNow }} <span class=\"has-text-grey\">({{ library.updated_at | time('lll') }})</span></td>\n </tr>\n <tr>\n <th>Uptime</th>\n <td class=\"has-text-right\">{{ library.started_at | timeFromNow(true) }} <span class=\"has-text-grey\">({{ library.started_at | time('ll') }})</span></td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n </div>\n </section>\n <section class=\"section\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <div class=\"content has-text-centered-mobile\">\n <p class=\"is-size-7\">Compiled with support for {{ config.buildoptions | join }}.</p>\n <p class=\"is-size-7\">Web interface built with <a href=\"http://bulma.io\">Bulma</a>, <a href=\"https://materialdesignicons.com/\">Material Design Icons</a>, <a href=\"https://vuejs.org/\">Vue.js</a>, <a href=\"https://github.com/mzabriskie/axios\">axios</a> and <a href=\"https://github.com/owntone/owntone-server/network/dependencies\">more</a>.</p>\n </div>\n </div>\n </div>\n </div>\n </section>\n </div>\n</template>\n\n<script>\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'PageAbout',\n\n data () {\n return {\n show_update_dropdown: false,\n show_update_library: false\n }\n },\n\n computed: {\n config () {\n return this.$store.state.config\n },\n library () {\n return this.$store.state.library\n }\n },\n\n methods: {\n onClickOutside (event) {\n this.show_update_dropdown = false\n },\n showUpdateDialog () {\n this.$store.commit(types.SHOW_UPDATE_DIALOG, true)\n }\n },\n\n filters: {\n join: function (array) {\n return array.join(', ')\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAbout.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAbout.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageAbout.vue?vue&type=template&id=4ec3a9c4&\"\nimport script from \"./PageAbout.vue?vue&type=script&lang=js&\"\nexport * from \"./PageAbout.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"New Releases\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.new_releases),function(album){return _c('spotify-list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[(_vm.is_visible_artwork)?_c('template',{slot:\"artwork\"},[_c('p',{staticClass:\"image is-64x64 fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":_vm.artwork_url(album),\"artist\":album.artist,\"album\":album.name,\"maxwidth\":64,\"maxheight\":64}})],1)]):_vm._e(),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_album_dialog(album)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('spotify-modal-dialog-album',{attrs:{\"show\":_vm.show_album_details_modal,\"album\":_vm.selected_album},on:{\"close\":function($event){_vm.show_album_details_modal = false}}})],2),_c('template',{slot:\"footer\"},[_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('router-link',{staticClass:\"button is-light is-small is-rounded\",attrs:{\"to\":\"/music/spotify/new-releases\"}},[_vm._v(\" Show more \")])],1)])])],2),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Featured Playlists\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.featured_playlists),function(playlist){return _c('spotify-list-item-playlist',{key:playlist.id,attrs:{\"playlist\":playlist}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_playlist_dialog(playlist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('spotify-modal-dialog-playlist',{attrs:{\"show\":_vm.show_playlist_details_modal,\"playlist\":_vm.selected_playlist},on:{\"close\":function($event){_vm.show_playlist_details_modal = false}}})],2),_c('template',{slot:\"footer\"},[_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('router-link',{staticClass:\"button is-light is-small is-rounded\",attrs:{\"to\":\"/music/spotify/featured-playlists\"}},[_vm._v(\" Show more \")])],1)])])],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\"},[(_vm.$slots['artwork'])?_c('div',{staticClass:\"media-left fd-has-action\",on:{\"click\":_vm.listeners.click}},[_vm._t(\"artwork\")],2):_vm._e(),_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.listeners.click}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.props.album.name))]),_c('h2',{staticClass:\"subtitle is-7 has-text-grey\"},[_c('b',[_vm._v(_vm._s(_vm.props.album.artists[0].name))])]),_c('h2',{staticClass:\"subtitle is-7 has-text-grey has-text-weight-normal\"},[_vm._v(\"(\"+_vm._s(_vm.props.album.album_type)+\", \"+_vm._s(_vm._f(\"time\")(_vm.props.album.release_date,'L'))+\")\")])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template functional>\n <div class=\"media\">\n <div class=\"media-left fd-has-action\"\n v-if=\"$slots['artwork']\"\n @click=\"listeners.click\">\n <slot name=\"artwork\"></slot>\n </div>\n <div class=\"media-content fd-has-action is-clipped\" @click=\"listeners.click\">\n <h1 class=\"title is-6\">{{ props.album.name }}</h1>\n <h2 class=\"subtitle is-7 has-text-grey\"><b>{{ props.album.artists[0].name }}</b></h2>\n <h2 class=\"subtitle is-7 has-text-grey has-text-weight-normal\">({{ props.album.album_type }}, {{ props.album.release_date | time('L') }})</h2>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'SpotifyListItemAlbum',\n props: ['album']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyListItemAlbum.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyListItemAlbum.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyListItemAlbum.vue?vue&type=template&id=62c75d12&functional=true&\"\nimport script from \"./SpotifyListItemAlbum.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyListItemAlbum.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"media\"},[_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.open_playlist}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.playlist.name))]),_c('h2',{staticClass:\"subtitle is-7\"},[_vm._v(_vm._s(_vm.playlist.owner.display_name))])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"media\">\n <div class=\"media-content fd-has-action is-clipped\" v-on:click=\"open_playlist\">\n <h1 class=\"title is-6\">{{ playlist.name }}</h1>\n <h2 class=\"subtitle is-7\">{{ playlist.owner.display_name }}</h2>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'SpotifyListItemPlaylist',\n props: ['playlist'],\n\n methods: {\n open_playlist: function () {\n this.$router.push({ path: '/music/spotify/playlists/' + this.playlist.id })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyListItemPlaylist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyListItemPlaylist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyListItemPlaylist.vue?vue&type=template&id=5f06cfec&\"\nimport script from \"./SpotifyListItemPlaylist.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyListItemPlaylist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('figure',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.artwork_visible),expression:\"artwork_visible\"}],staticClass:\"image is-square fd-has-margin-bottom\"},[_c('img',{staticClass:\"fd-has-shadow\",attrs:{\"src\":_vm.artwork_url},on:{\"load\":_vm.artwork_loaded,\"error\":_vm.artwork_error}})]),_c('p',{staticClass:\"title is-4\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_album}},[_vm._v(_vm._s(_vm.album.name))])]),_c('div',{staticClass:\"content is-small\"},[_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album artist\")]),_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.album.artists[0].name))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Release date\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"time\")(_vm.album.release_date,'L')))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Type\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.album.album_type))])])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <figure class=\"image is-square fd-has-margin-bottom\" v-show=\"artwork_visible\">\n <img :src=\"artwork_url\" @load=\"artwork_loaded\" @error=\"artwork_error\" class=\"fd-has-shadow\">\n </figure>\n <p class=\"title is-4\">\n <a class=\"has-text-link\" @click=\"open_album\">{{ album.name }}</a>\n </p>\n <div class=\"content is-small\">\n <p>\n <span class=\"heading\">Album artist</span>\n <a class=\"title is-6 has-text-link\" @click=\"open_artist\">{{ album.artists[0].name }}</a>\n </p>\n <p>\n <span class=\"heading\">Release date</span>\n <span class=\"title is-6\">{{ album.release_date | time('L') }}</span>\n </p>\n <p>\n <span class=\"heading\">Type</span>\n <span class=\"title is-6\">{{ album.album_type }}</span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'SpotifyModalDialogAlbum',\n props: ['show', 'album'],\n\n data () {\n return {\n artwork_visible: false\n }\n },\n\n computed: {\n artwork_url: function () {\n if (this.album.images && this.album.images.length > 0) {\n return this.album.images[0].url\n }\n return ''\n }\n },\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_uri(this.album.uri, false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_add(this.album.uri)\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_add_next(this.album.uri)\n },\n\n open_album: function () {\n this.$router.push({ path: '/music/spotify/albums/' + this.album.id })\n },\n\n open_artist: function () {\n this.$router.push({ path: '/music/spotify/artists/' + this.album.artists[0].id })\n },\n\n artwork_loaded: function () {\n this.artwork_visible = true\n },\n\n artwork_error: function () {\n this.artwork_visible = false\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyModalDialogAlbum.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyModalDialogAlbum.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyModalDialogAlbum.vue?vue&type=template&id=c74b0d5a&\"\nimport script from \"./SpotifyModalDialogAlbum.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyModalDialogAlbum.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_playlist}},[_vm._v(_vm._s(_vm.playlist.name))])]),_c('div',{staticClass:\"content is-small\"},[_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Owner\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.playlist.owner.display_name))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Tracks\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.playlist.tracks.total))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Path\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.playlist.uri))])])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n <a class=\"has-text-link\" @click=\"open_playlist\">{{ playlist.name }}</a>\n </p>\n <div class=\"content is-small\">\n <p>\n <span class=\"heading\">Owner</span>\n <span class=\"title is-6\">{{ playlist.owner.display_name }}</span>\n </p>\n <p>\n <span class=\"heading\">Tracks</span>\n <span class=\"title is-6\">{{ playlist.tracks.total }}</span>\n </p>\n <p>\n <span class=\"heading\">Path</span>\n <span class=\"title is-6\">{{ playlist.uri }}</span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'SpotifyModalDialogPlaylist',\n props: ['show', 'playlist'],\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_uri(this.playlist.uri, false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_add(this.playlist.uri)\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_add_next(this.playlist.uri)\n },\n\n open_playlist: function () {\n this.$router.push({ path: '/music/spotify/playlists/' + this.playlist.id })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyModalDialogPlaylist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyModalDialogPlaylist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyModalDialogPlaylist.vue?vue&type=template&id=306ad148&\"\nimport script from \"./SpotifyModalDialogPlaylist.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyModalDialogPlaylist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <tabs-music></tabs-music>\n\n <!-- New Releases -->\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">New Releases</p>\n </template>\n <template slot=\"content\">\n <spotify-list-item-album v-for=\"album in new_releases\"\n :key=\"album.id\"\n :album=\"album\"\n @click=\"open_album(album)\">\n <template slot=\"artwork\" v-if=\"is_visible_artwork\">\n <p class=\"image is-64x64 fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"artwork_url(album)\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n :maxwidth=\"64\"\n :maxheight=\"64\" />\n </p>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_album_dialog(album)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-album>\n <spotify-modal-dialog-album :show=\"show_album_details_modal\" :album=\"selected_album\" @close=\"show_album_details_modal = false\" />\n </template>\n <template slot=\"footer\">\n <nav class=\"level\">\n <p class=\"level-item\">\n <router-link to=\"/music/spotify/new-releases\" class=\"button is-light is-small is-rounded\">\n Show more\n </router-link>\n </p>\n </nav>\n </template>\n </content-with-heading>\n\n <!-- Featured Playlists -->\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Featured Playlists</p>\n </template>\n <template slot=\"content\">\n <spotify-list-item-playlist v-for=\"playlist in featured_playlists\" :key=\"playlist.id\" :playlist=\"playlist\">\n <template slot=\"actions\">\n <a @click=\"open_playlist_dialog(playlist)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-playlist>\n <spotify-modal-dialog-playlist :show=\"show_playlist_details_modal\" :playlist=\"selected_playlist\" @close=\"show_playlist_details_modal = false\" />\n </template>\n <template slot=\"footer\">\n <nav class=\"level\">\n <p class=\"level-item\">\n <router-link to=\"/music/spotify/featured-playlists\" class=\"button is-light is-small is-rounded\">\n Show more\n </router-link>\n </p>\n </nav>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport SpotifyListItemAlbum from '@/components/SpotifyListItemAlbum'\nimport SpotifyListItemPlaylist from '@/components/SpotifyListItemPlaylist'\nimport SpotifyModalDialogAlbum from '@/components/SpotifyModalDialogAlbum'\nimport SpotifyModalDialogPlaylist from '@/components/SpotifyModalDialogPlaylist'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport store from '@/store'\nimport * as types from '@/store/mutation_types'\nimport SpotifyWebApi from 'spotify-web-api-js'\n\nconst browseData = {\n load: function (to) {\n if (store.state.spotify_new_releases.length > 0 && store.state.spotify_featured_playlists.length > 0) {\n return Promise.resolve()\n }\n\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(store.state.spotify.webapi_token)\n return Promise.all([\n spotifyApi.getNewReleases({ country: store.state.spotify.webapi_country, limit: 50 }),\n spotifyApi.getFeaturedPlaylists({ country: store.state.spotify.webapi_country, limit: 50 })\n ])\n },\n\n set: function (vm, response) {\n if (response) {\n store.commit(types.SPOTIFY_NEW_RELEASES, response[0].albums.items)\n store.commit(types.SPOTIFY_FEATURED_PLAYLISTS, response[1].playlists.items)\n }\n }\n}\n\nexport default {\n name: 'SpotifyPageBrowse',\n mixins: [LoadDataBeforeEnterMixin(browseData)],\n components: { ContentWithHeading, TabsMusic, SpotifyListItemAlbum, SpotifyListItemPlaylist, SpotifyModalDialogAlbum, SpotifyModalDialogPlaylist, CoverArtwork },\n\n data () {\n return {\n show_album_details_modal: false,\n selected_album: {},\n\n show_playlist_details_modal: false,\n selected_playlist: {}\n }\n },\n\n computed: {\n new_releases () {\n return this.$store.state.spotify_new_releases.slice(0, 3)\n },\n\n featured_playlists () {\n return this.$store.state.spotify_featured_playlists.slice(0, 3)\n },\n\n is_visible_artwork () {\n return this.$store.getters.settings_option('webinterface', 'show_cover_artwork_in_album_lists').value\n }\n },\n\n methods: {\n\n open_album: function (album) {\n this.$router.push({ path: '/music/spotify/albums/' + album.id })\n },\n\n open_album_dialog: function (album) {\n this.selected_album = album\n this.show_album_details_modal = true\n },\n\n open_playlist_dialog: function (playlist) {\n this.selected_playlist = playlist\n this.show_playlist_details_modal = true\n },\n\n artwork_url: function (album) {\n if (album.images && album.images.length > 0) {\n return album.images[0].url\n }\n return ''\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageBrowse.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageBrowse.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyPageBrowse.vue?vue&type=template&id=55573f08&\"\nimport script from \"./SpotifyPageBrowse.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyPageBrowse.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"New Releases\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.new_releases),function(album){return _c('spotify-list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[(_vm.is_visible_artwork)?_c('template',{slot:\"artwork\"},[_c('p',{staticClass:\"image is-64x64 fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":_vm.artwork_url(album),\"artist\":album.artist,\"album\":album.name,\"maxwidth\":64,\"maxheight\":64}})],1)]):_vm._e(),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_album_dialog(album)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('spotify-modal-dialog-album',{attrs:{\"show\":_vm.show_album_details_modal,\"album\":_vm.selected_album},on:{\"close\":function($event){_vm.show_album_details_modal = false}}})],2)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-music></tabs-music>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">New Releases</p>\n </template>\n <template slot=\"content\">\n <spotify-list-item-album v-for=\"album in new_releases\"\n :key=\"album.id\"\n :album=\"album\"\n @click=\"open_album(album)\">\n <template slot=\"artwork\" v-if=\"is_visible_artwork\">\n <p class=\"image is-64x64 fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"artwork_url(album)\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n :maxwidth=\"64\"\n :maxheight=\"64\" />\n </p>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_album_dialog(album)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-album>\n <spotify-modal-dialog-album :show=\"show_album_details_modal\" :album=\"selected_album\" @close=\"show_album_details_modal = false\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport SpotifyListItemAlbum from '@/components/SpotifyListItemAlbum'\nimport SpotifyModalDialogAlbum from '@/components/SpotifyModalDialogAlbum'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport store from '@/store'\nimport * as types from '@/store/mutation_types'\nimport SpotifyWebApi from 'spotify-web-api-js'\n\nconst browseData = {\n load: function (to) {\n if (store.state.spotify_new_releases.length > 0) {\n return Promise.resolve()\n }\n\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(store.state.spotify.webapi_token)\n return spotifyApi.getNewReleases({ country: store.state.spotify.webapi_country, limit: 50 })\n },\n\n set: function (vm, response) {\n if (response) {\n store.commit(types.SPOTIFY_NEW_RELEASES, response.albums.items)\n }\n }\n}\n\nexport default {\n name: 'SpotifyPageBrowseNewReleases',\n mixins: [LoadDataBeforeEnterMixin(browseData)],\n components: { ContentWithHeading, TabsMusic, SpotifyListItemAlbum, SpotifyModalDialogAlbum, CoverArtwork },\n\n data () {\n return {\n show_album_details_modal: false,\n selected_album: {}\n }\n },\n\n computed: {\n new_releases () {\n return this.$store.state.spotify_new_releases\n },\n\n is_visible_artwork () {\n return this.$store.getters.settings_option('webinterface', 'show_cover_artwork_in_album_lists').value\n }\n },\n\n methods: {\n\n open_album: function (album) {\n this.$router.push({ path: '/music/spotify/albums/' + album.id })\n },\n\n open_album_dialog: function (album) {\n this.selected_album = album\n this.show_album_details_modal = true\n },\n\n artwork_url: function (album) {\n if (album.images && album.images.length > 0) {\n return album.images[0].url\n }\n return ''\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageBrowseNewReleases.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageBrowseNewReleases.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyPageBrowseNewReleases.vue?vue&type=template&id=81c5055e&\"\nimport script from \"./SpotifyPageBrowseNewReleases.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyPageBrowseNewReleases.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Featured Playlists\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.featured_playlists),function(playlist){return _c('spotify-list-item-playlist',{key:playlist.id,attrs:{\"playlist\":playlist}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_playlist_dialog(playlist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('spotify-modal-dialog-playlist',{attrs:{\"show\":_vm.show_playlist_details_modal,\"playlist\":_vm.selected_playlist},on:{\"close\":function($event){_vm.show_playlist_details_modal = false}}})],2)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-music></tabs-music>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Featured Playlists</p>\n </template>\n <template slot=\"content\">\n <spotify-list-item-playlist v-for=\"playlist in featured_playlists\" :key=\"playlist.id\" :playlist=\"playlist\">\n <template slot=\"actions\">\n <a @click=\"open_playlist_dialog(playlist)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-playlist>\n <spotify-modal-dialog-playlist :show=\"show_playlist_details_modal\" :playlist=\"selected_playlist\" @close=\"show_playlist_details_modal = false\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport SpotifyListItemPlaylist from '@/components/SpotifyListItemPlaylist'\nimport SpotifyModalDialogPlaylist from '@/components/SpotifyModalDialogPlaylist'\nimport store from '@/store'\nimport * as types from '@/store/mutation_types'\nimport SpotifyWebApi from 'spotify-web-api-js'\n\nconst browseData = {\n load: function (to) {\n if (store.state.spotify_featured_playlists.length > 0) {\n return Promise.resolve()\n }\n\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(store.state.spotify.webapi_token)\n spotifyApi.getFeaturedPlaylists({ country: store.state.spotify.webapi_country, limit: 50 })\n },\n\n set: function (vm, response) {\n if (response) {\n store.commit(types.SPOTIFY_FEATURED_PLAYLISTS, response.playlists.items)\n }\n }\n}\n\nexport default {\n name: 'SpotifyPageBrowseFeaturedPlaylists',\n mixins: [LoadDataBeforeEnterMixin(browseData)],\n components: { ContentWithHeading, TabsMusic, SpotifyListItemPlaylist, SpotifyModalDialogPlaylist },\n\n data () {\n return {\n show_playlist_details_modal: false,\n selected_playlist: {}\n }\n },\n\n computed: {\n featured_playlists () {\n return this.$store.state.spotify_featured_playlists\n }\n },\n\n methods: {\n open_playlist_dialog: function (playlist) {\n this.selected_playlist = playlist\n this.show_playlist_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageBrowseFeaturedPlaylists.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageBrowseFeaturedPlaylists.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyPageBrowseFeaturedPlaylists.vue?vue&type=template&id=0258f289&\"\nimport script from \"./SpotifyPageBrowseFeaturedPlaylists.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyPageBrowseFeaturedPlaylists.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.artist.name))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_artist_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.total)+\" albums\")]),_vm._l((_vm.albums),function(album){return _c('spotify-list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[(_vm.is_visible_artwork)?_c('template',{slot:\"artwork\"},[_c('p',{staticClass:\"image is-64x64 fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":_vm.artwork_url(album),\"artist\":album.artist,\"album\":album.name,\"maxwidth\":64,\"maxheight\":64}})],1)]):_vm._e(),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(album)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),(_vm.offset < _vm.total)?_c('infinite-loading',{on:{\"infinite\":_vm.load_next}},[_c('span',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_vm._v(\".\")])]):_vm._e(),_c('spotify-modal-dialog-album',{attrs:{\"show\":_vm.show_details_modal,\"album\":_vm.selected_album},on:{\"close\":function($event){_vm.show_details_modal = false}}}),_c('spotify-modal-dialog-artist',{attrs:{\"show\":_vm.show_artist_details_modal,\"artist\":_vm.artist},on:{\"close\":function($event){_vm.show_artist_details_modal = false}}})],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.artist.name))])]),_c('div',{staticClass:\"content is-small\"},[_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Popularity / Followers\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.artist.popularity)+\" / \"+_vm._s(_vm.artist.followers.total))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Genres\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.artist.genres.join(', ')))])])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n <a class=\"has-text-link\" @click=\"open_artist\">{{ artist.name }}</a>\n </p>\n <div class=\"content is-small\">\n <p>\n <span class=\"heading\">Popularity / Followers</span>\n <span class=\"title is-6\">{{ artist.popularity }} / {{ artist.followers.total }}</span>\n </p>\n <p>\n <span class=\"heading\">Genres</span>\n <span class=\"title is-6\">{{ artist.genres.join(', ') }}</span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'SpotifyModalDialogArtist',\n props: ['show', 'artist'],\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_uri(this.artist.uri, false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_add(this.artist.uri)\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_add_next(this.artist.uri)\n },\n\n open_artist: function () {\n this.$router.push({ path: '/music/spotify/artists/' + this.artist.id })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyModalDialogArtist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyModalDialogArtist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyModalDialogArtist.vue?vue&type=template&id=7a611bba&\"\nimport script from \"./SpotifyModalDialogArtist.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyModalDialogArtist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ artist.name }}</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_artist_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ total }} albums</p>\n <spotify-list-item-album v-for=\"album in albums\"\n :key=\"album.id\"\n :album=\"album\"\n @click=\"open_album(album)\">\n <template slot=\"artwork\" v-if=\"is_visible_artwork\">\n <p class=\"image is-64x64 fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"artwork_url(album)\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n :maxwidth=\"64\"\n :maxheight=\"64\" />\n </p>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_dialog(album)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-album>\n <infinite-loading v-if=\"offset < total\" @infinite=\"load_next\"><span slot=\"no-more\">.</span></infinite-loading>\n <spotify-modal-dialog-album :show=\"show_details_modal\" :album=\"selected_album\" @close=\"show_details_modal = false\" />\n <spotify-modal-dialog-artist :show=\"show_artist_details_modal\" :artist=\"artist\" @close=\"show_artist_details_modal = false\" />\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport SpotifyListItemAlbum from '@/components/SpotifyListItemAlbum'\nimport SpotifyModalDialogAlbum from '@/components/SpotifyModalDialogAlbum'\nimport SpotifyModalDialogArtist from '@/components/SpotifyModalDialogArtist'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport store from '@/store'\nimport webapi from '@/webapi'\nimport SpotifyWebApi from 'spotify-web-api-js'\nimport InfiniteLoading from 'vue-infinite-loading'\n\nconst artistData = {\n load: function (to) {\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(store.state.spotify.webapi_token)\n return Promise.all([\n spotifyApi.getArtist(to.params.artist_id),\n spotifyApi.getArtistAlbums(to.params.artist_id, { limit: 50, offset: 0, include_groups: 'album,single', market: store.state.spotify.webapi_country })\n ])\n },\n\n set: function (vm, response) {\n vm.artist = response[0]\n\n vm.albums = []\n vm.total = 0\n vm.offset = 0\n vm.append_albums(response[1])\n }\n}\n\nexport default {\n name: 'SpotifyPageArtist',\n mixins: [LoadDataBeforeEnterMixin(artistData)],\n components: { ContentWithHeading, SpotifyListItemAlbum, SpotifyModalDialogAlbum, SpotifyModalDialogArtist, InfiniteLoading, CoverArtwork },\n\n data () {\n return {\n artist: {},\n albums: [],\n total: 0,\n offset: 0,\n\n show_details_modal: false,\n selected_album: {},\n\n show_artist_details_modal: false\n }\n },\n\n computed: {\n is_visible_artwork () {\n return this.$store.getters.settings_option('webinterface', 'show_cover_artwork_in_album_lists').value\n }\n },\n\n methods: {\n load_next: function ($state) {\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(this.$store.state.spotify.webapi_token)\n spotifyApi.getArtistAlbums(this.artist.id, { limit: 50, offset: this.offset, include_groups: 'album,single' }).then(data => {\n this.append_albums(data, $state)\n })\n },\n\n append_albums: function (data, $state) {\n this.albums = this.albums.concat(data.items)\n this.total = data.total\n this.offset += data.limit\n\n if ($state) {\n $state.loaded()\n if (this.offset >= this.total) {\n $state.complete()\n }\n }\n },\n\n play: function () {\n this.show_details_modal = false\n webapi.player_play_uri(this.artist.uri, true)\n },\n\n open_album: function (album) {\n this.$router.push({ path: '/music/spotify/albums/' + album.id })\n },\n\n open_dialog: function (album) {\n this.selected_album = album\n this.show_details_modal = true\n },\n\n artwork_url: function (album) {\n if (album.images && album.images.length > 0) {\n return album.images[0].url\n }\n return ''\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageArtist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageArtist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyPageArtist.vue?vue&type=template&id=07ed0523&\"\nimport script from \"./SpotifyPageArtist.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyPageArtist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-hero',[_c('template',{slot:\"heading-left\"},[_c('h1',{staticClass:\"title is-5\"},[_vm._v(_vm._s(_vm.album.name))]),_c('h2',{staticClass:\"subtitle is-6 has-text-link has-text-weight-normal\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.album.artists[0].name))])]),_c('div',{staticClass:\"buttons fd-is-centered-mobile fd-has-margin-top\"},[_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])]),_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_album_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])])])]),_c('template',{slot:\"heading-right\"},[_c('p',{staticClass:\"image is-square fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":_vm.artwork_url,\"artist\":_vm.album.artist,\"album\":_vm.album.name},on:{\"click\":function($event){_vm.show_album_details_modal = true}}})],1)]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading is-7 has-text-centered-mobile fd-has-margin-top\"},[_vm._v(_vm._s(_vm.album.tracks.total)+\" tracks\")]),_vm._l((_vm.album.tracks.items),function(track,index){return _c('spotify-list-item-track',{key:track.id,attrs:{\"track\":track,\"position\":index,\"album\":_vm.album,\"context_uri\":_vm.album.uri}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_track_dialog(track)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('spotify-modal-dialog-track',{attrs:{\"show\":_vm.show_track_details_modal,\"track\":_vm.selected_track,\"album\":_vm.album},on:{\"close\":function($event){_vm.show_track_details_modal = false}}}),_c('spotify-modal-dialog-album',{attrs:{\"show\":_vm.show_album_details_modal,\"album\":_vm.album},on:{\"close\":function($event){_vm.show_album_details_modal = false}}})],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"media\"},[_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.play}},[_c('h1',{staticClass:\"title is-6\",class:{ 'has-text-grey-light': _vm.track.is_playable === false }},[_vm._v(_vm._s(_vm.track.name))]),_c('h2',{staticClass:\"subtitle is-7\",class:{ 'has-text-grey': _vm.track.is_playable, 'has-text-grey-light': _vm.track.is_playable === false }},[_c('b',[_vm._v(_vm._s(_vm.track.artists[0].name))])]),(_vm.track.is_playable === false)?_c('h2',{staticClass:\"subtitle is-7\"},[_vm._v(\" (Track is not playable\"),(_vm.track.restrictions && _vm.track.restrictions.reason)?_c('span',[_vm._v(\", restriction reason: \"+_vm._s(_vm.track.restrictions.reason))]):_vm._e(),_vm._v(\") \")]):_vm._e()]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"media\">\n <div class=\"media-content fd-has-action is-clipped\" v-on:click=\"play\">\n <h1 class=\"title is-6\" :class=\"{ 'has-text-grey-light': track.is_playable === false }\">{{ track.name }}</h1>\n <h2 class=\"subtitle is-7\" :class=\"{ 'has-text-grey': track.is_playable, 'has-text-grey-light': track.is_playable === false }\"><b>{{ track.artists[0].name }}</b></h2>\n <h2 class=\"subtitle is-7\" v-if=\"track.is_playable === false\">\n (Track is not playable<span v-if=\"track.restrictions && track.restrictions.reason\">, restriction reason: {{ track.restrictions.reason }}</span>)\n </h2>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'SpotifyListItemTrack',\n\n props: ['track', 'position', 'album', 'context_uri'],\n\n methods: {\n play: function () {\n webapi.player_play_uri(this.context_uri, false, this.position)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyListItemTrack.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyListItemTrack.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyListItemTrack.vue?vue&type=template&id=506afade&\"\nimport script from \"./SpotifyListItemTrack.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyListItemTrack.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\" \"+_vm._s(_vm.track.name)+\" \")]),_c('p',{staticClass:\"subtitle\"},[_vm._v(\" \"+_vm._s(_vm.track.artists[0].name)+\" \")]),_c('div',{staticClass:\"content is-small\"},[_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album\")]),_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_album}},[_vm._v(_vm._s(_vm.album.name))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album artist\")]),_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.album.artists[0].name))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Release date\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"time\")(_vm.album.release_date,'L')))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Track / Disc\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.track.track_number)+\" / \"+_vm._s(_vm.track.disc_number))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Length\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"duration\")(_vm.track.duration_ms)))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Path\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.track.uri))])])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n {{ track.name }}\n </p>\n <p class=\"subtitle\">\n {{ track.artists[0].name }}\n </p>\n <div class=\"content is-small\">\n <p>\n <span class=\"heading\">Album</span>\n <a class=\"title is-6 has-text-link\" @click=\"open_album\">{{ album.name }}</a>\n </p>\n <p>\n <span class=\"heading\">Album artist</span>\n <a class=\"title is-6 has-text-link\" @click=\"open_artist\">{{ album.artists[0].name }}</a>\n </p>\n <p>\n <span class=\"heading\">Release date</span>\n <span class=\"title is-6\">{{ album.release_date | time('L') }}</span>\n </p>\n <p>\n <span class=\"heading\">Track / Disc</span>\n <span class=\"title is-6\">{{ track.track_number }} / {{ track.disc_number }}</span>\n </p>\n <p>\n <span class=\"heading\">Length</span>\n <span class=\"title is-6\">{{ track.duration_ms | duration }}</span>\n </p>\n <p>\n <span class=\"heading\">Path</span>\n <span class=\"title is-6\">{{ track.uri }}</span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'SpotifyModalDialogTrack',\n props: ['show', 'track', 'album'],\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_uri(this.track.uri, false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_add(this.track.uri)\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_add_next(this.track.uri)\n },\n\n open_album: function () {\n this.$router.push({ path: '/music/spotify/albums/' + this.album.id })\n },\n\n open_artist: function () {\n this.$router.push({ path: '/music/spotify/artists/' + this.album.artists[0].id })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyModalDialogTrack.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyModalDialogTrack.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyModalDialogTrack.vue?vue&type=template&id=094bebe4&\"\nimport script from \"./SpotifyModalDialogTrack.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyModalDialogTrack.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <content-with-hero>\n <template slot=\"heading-left\">\n <h1 class=\"title is-5\">{{ album.name }}</h1>\n <h2 class=\"subtitle is-6 has-text-link has-text-weight-normal\"><a class=\"has-text-link\" @click=\"open_artist\">{{ album.artists[0].name }}</a></h2>\n\n <div class=\"buttons fd-is-centered-mobile fd-has-margin-top\">\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n <a class=\"button is-small is-light is-rounded\" @click=\"show_album_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n </div>\n </template>\n\n <template slot=\"heading-right\">\n <p class=\"image is-square fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"artwork_url\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n @click=\"show_album_details_modal = true\" />\n </p>\n </template>\n\n <template slot=\"content\">\n <p class=\"heading is-7 has-text-centered-mobile fd-has-margin-top\">{{ album.tracks.total }} tracks</p>\n <spotify-list-item-track v-for=\"(track, index) in album.tracks.items\" :key=\"track.id\" :track=\"track\" :position=\"index\" :album=\"album\" :context_uri=\"album.uri\">\n <template slot=\"actions\">\n <a @click=\"open_track_dialog(track)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-track>\n <spotify-modal-dialog-track :show=\"show_track_details_modal\" :track=\"selected_track\" :album=\"album\" @close=\"show_track_details_modal = false\" />\n <spotify-modal-dialog-album :show=\"show_album_details_modal\" :album=\"album\" @close=\"show_album_details_modal = false\" />\n </template>\n </content-with-hero>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHero from '@/templates/ContentWithHero'\nimport SpotifyListItemTrack from '@/components/SpotifyListItemTrack'\nimport SpotifyModalDialogTrack from '@/components/SpotifyModalDialogTrack'\nimport SpotifyModalDialogAlbum from '@/components/SpotifyModalDialogAlbum'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport store from '@/store'\nimport webapi from '@/webapi'\nimport SpotifyWebApi from 'spotify-web-api-js'\n\nconst albumData = {\n load: function (to) {\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(store.state.spotify.webapi_token)\n return spotifyApi.getAlbum(to.params.album_id, { market: store.state.spotify.webapi_country })\n },\n\n set: function (vm, response) {\n vm.album = response\n }\n}\n\nexport default {\n name: 'PageAlbum',\n mixins: [LoadDataBeforeEnterMixin(albumData)],\n components: { ContentWithHero, SpotifyListItemTrack, SpotifyModalDialogTrack, SpotifyModalDialogAlbum, CoverArtwork },\n\n data () {\n return {\n album: { artists: [{}], tracks: {} },\n\n show_track_details_modal: false,\n selected_track: {},\n\n show_album_details_modal: false\n }\n },\n\n computed: {\n artwork_url: function () {\n if (this.album.images && this.album.images.length > 0) {\n return this.album.images[0].url\n }\n return ''\n }\n },\n\n methods: {\n open_artist: function () {\n this.$router.push({ path: '/music/spotify/artists/' + this.album.artists[0].id })\n },\n\n play: function () {\n this.show_details_modal = false\n webapi.player_play_uri(this.album.uri, true)\n },\n\n open_track_dialog: function (track) {\n this.selected_track = track\n this.show_track_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageAlbum.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageAlbum.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyPageAlbum.vue?vue&type=template&id=a221103e&\"\nimport script from \"./SpotifyPageAlbum.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyPageAlbum.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.playlist.name))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_playlist_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.playlist.tracks.total)+\" tracks\")]),_vm._l((_vm.tracks),function(item,index){return _c('spotify-list-item-track',{key:item.track.id,attrs:{\"track\":item.track,\"album\":item.track.album,\"position\":index,\"context_uri\":_vm.playlist.uri}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_track_dialog(item.track)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),(_vm.offset < _vm.total)?_c('infinite-loading',{on:{\"infinite\":_vm.load_next}},[_c('span',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_vm._v(\".\")])]):_vm._e(),_c('spotify-modal-dialog-track',{attrs:{\"show\":_vm.show_track_details_modal,\"track\":_vm.selected_track,\"album\":_vm.selected_track.album},on:{\"close\":function($event){_vm.show_track_details_modal = false}}}),_c('spotify-modal-dialog-playlist',{attrs:{\"show\":_vm.show_playlist_details_modal,\"playlist\":_vm.playlist},on:{\"close\":function($event){_vm.show_playlist_details_modal = false}}})],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">{{ playlist.name }}</div>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_playlist_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ playlist.tracks.total }} tracks</p>\n <spotify-list-item-track v-for=\"(item, index) in tracks\" :key=\"item.track.id\" :track=\"item.track\" :album=\"item.track.album\" :position=\"index\" :context_uri=\"playlist.uri\">\n <template slot=\"actions\">\n <a @click=\"open_track_dialog(item.track)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-track>\n <infinite-loading v-if=\"offset < total\" @infinite=\"load_next\"><span slot=\"no-more\">.</span></infinite-loading>\n <spotify-modal-dialog-track :show=\"show_track_details_modal\" :track=\"selected_track\" :album=\"selected_track.album\" @close=\"show_track_details_modal = false\" />\n <spotify-modal-dialog-playlist :show=\"show_playlist_details_modal\" :playlist=\"playlist\" @close=\"show_playlist_details_modal = false\" />\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport SpotifyListItemTrack from '@/components/SpotifyListItemTrack'\nimport SpotifyModalDialogTrack from '@/components/SpotifyModalDialogTrack'\nimport SpotifyModalDialogPlaylist from '@/components/SpotifyModalDialogPlaylist'\nimport store from '@/store'\nimport webapi from '@/webapi'\nimport SpotifyWebApi from 'spotify-web-api-js'\nimport InfiniteLoading from 'vue-infinite-loading'\n\nconst playlistData = {\n load: function (to) {\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(store.state.spotify.webapi_token)\n return Promise.all([\n spotifyApi.getPlaylist(to.params.playlist_id),\n spotifyApi.getPlaylistTracks(to.params.playlist_id, { limit: 50, offset: 0 })\n ])\n },\n\n set: function (vm, response) {\n vm.playlist = response[0]\n vm.tracks = []\n vm.total = 0\n vm.offset = 0\n vm.append_tracks(response[1])\n }\n}\n\nexport default {\n name: 'SpotifyPagePlaylist',\n mixins: [LoadDataBeforeEnterMixin(playlistData)],\n components: { ContentWithHeading, SpotifyListItemTrack, SpotifyModalDialogTrack, SpotifyModalDialogPlaylist, InfiniteLoading },\n\n data () {\n return {\n playlist: { tracks: {} },\n tracks: [],\n total: 0,\n offset: 0,\n\n show_track_details_modal: false,\n selected_track: {},\n\n show_playlist_details_modal: false\n }\n },\n\n methods: {\n load_next: function ($state) {\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(this.$store.state.spotify.webapi_token)\n spotifyApi.getPlaylistTracks(this.playlist.id, { limit: 50, offset: this.offset }).then(data => {\n this.append_tracks(data, $state)\n })\n },\n\n append_tracks: function (data, $state) {\n this.tracks = this.tracks.concat(data.items)\n this.total = data.total\n this.offset += data.limit\n\n if ($state) {\n $state.loaded()\n if (this.offset >= this.total) {\n $state.complete()\n }\n }\n },\n\n play: function () {\n this.show_details_modal = false\n webapi.player_play_uri(this.playlist.uri, true)\n },\n\n open_track_dialog: function (track) {\n this.selected_track = track\n this.show_track_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPagePlaylist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPagePlaylist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyPagePlaylist.vue?vue&type=template&id=c72f0fb2&\"\nimport script from \"./SpotifyPagePlaylist.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyPagePlaylist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('section',{staticClass:\"section fd-remove-padding-bottom\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.new_search.apply(null, arguments)}}},[_c('div',{staticClass:\"field\"},[_c('p',{staticClass:\"control is-expanded has-icons-left\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.search_query),expression:\"search_query\"}],ref:\"search_field\",staticClass:\"input is-rounded is-shadowless\",attrs:{\"type\":\"text\",\"placeholder\":\"Search\",\"autocomplete\":\"off\"},domProps:{\"value\":(_vm.search_query)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.search_query=$event.target.value}}}),_vm._m(0)])])]),_c('div',{staticClass:\"tags\",staticStyle:{\"margin-top\":\"16px\"}},_vm._l((_vm.recent_searches),function(recent_search){return _c('a',{key:recent_search,staticClass:\"tag\",on:{\"click\":function($event){return _vm.open_recent_search(recent_search)}}},[_vm._v(_vm._s(recent_search))])}),0)])])])]),_c('tabs-search',{attrs:{\"query\":_vm.search_query}}),(_vm.show_tracks && _vm.tracks.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Tracks\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.tracks.items),function(track){return _c('spotify-list-item-track',{key:track.id,attrs:{\"track\":track,\"album\":track.album,\"position\":0,\"context_uri\":track.uri}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_track_dialog(track)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),(_vm.query.type === 'track')?_c('infinite-loading',{on:{\"infinite\":_vm.search_tracks_next}},[_c('span',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_vm._v(\".\")])]):_vm._e(),_c('spotify-modal-dialog-track',{attrs:{\"show\":_vm.show_track_details_modal,\"track\":_vm.selected_track,\"album\":_vm.selected_track.album},on:{\"close\":function($event){_vm.show_track_details_modal = false}}})],2),_c('template',{slot:\"footer\"},[(_vm.show_all_tracks_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_tracks}},[_vm._v(\"Show all \"+_vm._s(_vm.tracks.total.toLocaleString())+\" tracks\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_tracks && !_vm.tracks.total)?_c('content-text',{staticClass:\"mt-6\"},[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No tracks found\")])])])],2):_vm._e(),(_vm.show_artists && _vm.artists.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Artists\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.artists.items),function(artist){return _c('spotify-list-item-artist',{key:artist.id,attrs:{\"artist\":artist}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_artist_dialog(artist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),(_vm.query.type === 'artist')?_c('infinite-loading',{on:{\"infinite\":_vm.search_artists_next}},[_c('span',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_vm._v(\".\")])]):_vm._e(),_c('spotify-modal-dialog-artist',{attrs:{\"show\":_vm.show_artist_details_modal,\"artist\":_vm.selected_artist},on:{\"close\":function($event){_vm.show_artist_details_modal = false}}})],2),_c('template',{slot:\"footer\"},[(_vm.show_all_artists_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_artists}},[_vm._v(\"Show all \"+_vm._s(_vm.artists.total.toLocaleString())+\" artists\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_artists && !_vm.artists.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No artists found\")])])])],2):_vm._e(),(_vm.show_albums && _vm.albums.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Albums\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.albums.items),function(album){return _c('spotify-list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[(_vm.is_visible_artwork)?_c('template',{slot:\"artwork\"},[_c('p',{staticClass:\"image is-64x64 fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":_vm.artwork_url(album),\"artist\":album.artist,\"album\":album.name,\"maxwidth\":64,\"maxheight\":64}})],1)]):_vm._e(),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_album_dialog(album)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),(_vm.query.type === 'album')?_c('infinite-loading',{on:{\"infinite\":_vm.search_albums_next}},[_c('span',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_vm._v(\".\")])]):_vm._e(),_c('spotify-modal-dialog-album',{attrs:{\"show\":_vm.show_album_details_modal,\"album\":_vm.selected_album},on:{\"close\":function($event){_vm.show_album_details_modal = false}}})],2),_c('template',{slot:\"footer\"},[(_vm.show_all_albums_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_albums}},[_vm._v(\"Show all \"+_vm._s(_vm.albums.total.toLocaleString())+\" albums\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_albums && !_vm.albums.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No albums found\")])])])],2):_vm._e(),(_vm.show_playlists && _vm.playlists.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Playlists\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.playlists.items),function(playlist){return _c('spotify-list-item-playlist',{key:playlist.id,attrs:{\"playlist\":playlist}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_playlist_dialog(playlist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),(_vm.query.type === 'playlist')?_c('infinite-loading',{on:{\"infinite\":_vm.search_playlists_next}},[_c('span',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_vm._v(\".\")])]):_vm._e(),_c('spotify-modal-dialog-playlist',{attrs:{\"show\":_vm.show_playlist_details_modal,\"playlist\":_vm.selected_playlist},on:{\"close\":function($event){_vm.show_playlist_details_modal = false}}})],2),_c('template',{slot:\"footer\"},[(_vm.show_all_playlists_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_playlists}},[_vm._v(\"Show all \"+_vm._s(_vm.playlists.total.toLocaleString())+\" playlists\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_playlists && !_vm.playlists.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No playlists found\")])])])],2):_vm._e()],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon is-left\"},[_c('i',{staticClass:\"mdi mdi-magnify\"})])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"media\"},[_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.open_artist}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.artist.name))])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"media\">\n <div class=\"media-content fd-has-action is-clipped\" v-on:click=\"open_artist\">\n <h1 class=\"title is-6\">{{ artist.name }}</h1>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'SpotifyListItemArtist',\n props: ['artist'],\n\n methods: {\n open_artist: function () {\n this.$router.push({ path: '/music/spotify/artists/' + this.artist.id })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyListItemArtist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyListItemArtist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyListItemArtist.vue?vue&type=template&id=59bc374f&\"\nimport script from \"./SpotifyListItemArtist.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyListItemArtist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <!-- Search field + recent searches -->\n <section class=\"section fd-remove-padding-bottom\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <form v-on:submit.prevent=\"new_search\">\n <div class=\"field\">\n <p class=\"control is-expanded has-icons-left\">\n <input class=\"input is-rounded is-shadowless\" type=\"text\" placeholder=\"Search\" v-model=\"search_query\" ref=\"search_field\" autocomplete=\"off\">\n <span class=\"icon is-left\">\n <i class=\"mdi mdi-magnify\"></i>\n </span>\n </p>\n </div>\n </form>\n <div class=\"tags\" style=\"margin-top: 16px;\">\n <a class=\"tag\" v-for=\"recent_search in recent_searches\" :key=\"recent_search\" @click=\"open_recent_search(recent_search)\">{{ recent_search }}</a>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <tabs-search :query=\"search_query\"></tabs-search>\n\n <!-- Tracks -->\n <content-with-heading v-if=\"show_tracks && tracks.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Tracks</p>\n </template>\n <template slot=\"content\">\n <spotify-list-item-track v-for=\"track in tracks.items\" :key=\"track.id\" :track=\"track\" :album=\"track.album\" :position=\"0\" :context_uri=\"track.uri\">\n <template slot=\"actions\">\n <a @click=\"open_track_dialog(track)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-track>\n <infinite-loading v-if=\"query.type === 'track'\" @infinite=\"search_tracks_next\"><span slot=\"no-more\">.</span></infinite-loading>\n <spotify-modal-dialog-track :show=\"show_track_details_modal\" :track=\"selected_track\" :album=\"selected_track.album\" @close=\"show_track_details_modal = false\" />\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_tracks_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_tracks\">Show all {{ tracks.total.toLocaleString() }} tracks</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_tracks && !tracks.total\" class=\"mt-6\">\n <template slot=\"content\">\n <p><i>No tracks found</i></p>\n </template>\n </content-text>\n\n <!-- Artists -->\n <content-with-heading v-if=\"show_artists && artists.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Artists</p>\n </template>\n <template slot=\"content\">\n <spotify-list-item-artist v-for=\"artist in artists.items\" :key=\"artist.id\" :artist=\"artist\">\n <template slot=\"actions\">\n <a @click=\"open_artist_dialog(artist)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-artist>\n <infinite-loading v-if=\"query.type === 'artist'\" @infinite=\"search_artists_next\"><span slot=\"no-more\">.</span></infinite-loading>\n <spotify-modal-dialog-artist :show=\"show_artist_details_modal\" :artist=\"selected_artist\" @close=\"show_artist_details_modal = false\" />\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_artists_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_artists\">Show all {{ artists.total.toLocaleString() }} artists</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_artists && !artists.total\">\n <template slot=\"content\">\n <p><i>No artists found</i></p>\n </template>\n </content-text>\n\n <!-- Albums -->\n <content-with-heading v-if=\"show_albums && albums.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Albums</p>\n </template>\n <template slot=\"content\">\n <spotify-list-item-album v-for=\"album in albums.items\"\n :key=\"album.id\"\n :album=\"album\"\n @click=\"open_album(album)\">\n <template slot=\"artwork\" v-if=\"is_visible_artwork\">\n <p class=\"image is-64x64 fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"artwork_url(album)\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n :maxwidth=\"64\"\n :maxheight=\"64\" />\n </p>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_album_dialog(album)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-album>\n <infinite-loading v-if=\"query.type === 'album'\" @infinite=\"search_albums_next\"><span slot=\"no-more\">.</span></infinite-loading>\n <spotify-modal-dialog-album :show=\"show_album_details_modal\" :album=\"selected_album\" @close=\"show_album_details_modal = false\" />\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_albums_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_albums\">Show all {{ albums.total.toLocaleString() }} albums</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_albums && !albums.total\">\n <template slot=\"content\">\n <p><i>No albums found</i></p>\n </template>\n </content-text>\n\n <!-- Playlists -->\n <content-with-heading v-if=\"show_playlists && playlists.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Playlists</p>\n </template>\n <template slot=\"content\">\n <spotify-list-item-playlist v-for=\"playlist in playlists.items\" :key=\"playlist.id\" :playlist=\"playlist\">\n <template slot=\"actions\">\n <a @click=\"open_playlist_dialog(playlist)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-playlist>\n <infinite-loading v-if=\"query.type === 'playlist'\" @infinite=\"search_playlists_next\"><span slot=\"no-more\">.</span></infinite-loading>\n <spotify-modal-dialog-playlist :show=\"show_playlist_details_modal\" :playlist=\"selected_playlist\" @close=\"show_playlist_details_modal = false\" />\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_playlists_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_playlists\">Show all {{ playlists.total.toLocaleString() }} playlists</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_playlists && !playlists.total\">\n <template slot=\"content\">\n <p><i>No playlists found</i></p>\n </template>\n </content-text>\n </div>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ContentText from '@/templates/ContentText'\nimport TabsSearch from '@/components/TabsSearch'\nimport SpotifyListItemTrack from '@/components/SpotifyListItemTrack'\nimport SpotifyListItemArtist from '@/components/SpotifyListItemArtist'\nimport SpotifyListItemAlbum from '@/components/SpotifyListItemAlbum'\nimport SpotifyListItemPlaylist from '@/components/SpotifyListItemPlaylist'\nimport SpotifyModalDialogTrack from '@/components/SpotifyModalDialogTrack'\nimport SpotifyModalDialogArtist from '@/components/SpotifyModalDialogArtist'\nimport SpotifyModalDialogAlbum from '@/components/SpotifyModalDialogAlbum'\nimport SpotifyModalDialogPlaylist from '@/components/SpotifyModalDialogPlaylist'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport SpotifyWebApi from 'spotify-web-api-js'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\nimport InfiniteLoading from 'vue-infinite-loading'\n\nexport default {\n name: 'SpotifyPageSearch',\n components: { ContentWithHeading, ContentText, TabsSearch, SpotifyListItemTrack, SpotifyListItemArtist, SpotifyListItemAlbum, SpotifyListItemPlaylist, SpotifyModalDialogTrack, SpotifyModalDialogArtist, SpotifyModalDialogAlbum, SpotifyModalDialogPlaylist, InfiniteLoading, CoverArtwork },\n\n data () {\n return {\n search_query: '',\n tracks: { items: [], total: 0 },\n artists: { items: [], total: 0 },\n albums: { items: [], total: 0 },\n playlists: { items: [], total: 0 },\n\n query: {},\n search_param: {},\n\n show_track_details_modal: false,\n selected_track: {},\n\n show_album_details_modal: false,\n selected_album: {},\n\n show_artist_details_modal: false,\n selected_artist: {},\n\n show_playlist_details_modal: false,\n selected_playlist: {},\n\n validSearchTypes: ['track', 'artist', 'album', 'playlist']\n }\n },\n\n computed: {\n recent_searches () {\n return this.$store.state.recent_searches.filter(search => !search.startsWith('query:'))\n },\n\n show_tracks () {\n return this.$route.query.type && this.$route.query.type.includes('track')\n },\n show_all_tracks_button () {\n return this.tracks.total > this.tracks.items.length\n },\n\n show_artists () {\n return this.$route.query.type && this.$route.query.type.includes('artist')\n },\n show_all_artists_button () {\n return this.artists.total > this.artists.items.length\n },\n\n show_albums () {\n return this.$route.query.type && this.$route.query.type.includes('album')\n },\n show_all_albums_button () {\n return this.albums.total > this.albums.items.length\n },\n\n show_playlists () {\n return this.$route.query.type && this.$route.query.type.includes('playlist')\n },\n show_all_playlists_button () {\n return this.playlists.total > this.playlists.items.length\n },\n\n is_visible_artwork () {\n return this.$store.getters.settings_option('webinterface', 'show_cover_artwork_in_album_lists').value\n }\n },\n\n methods: {\n reset: function () {\n this.tracks = { items: [], total: 0 }\n this.artists = { items: [], total: 0 }\n this.albums = { items: [], total: 0 }\n this.playlists = { items: [], total: 0 }\n },\n\n search: function () {\n this.reset()\n\n // If no search query present reset and focus search field\n if (!this.query.query || this.query.query === '' || this.query.query.startsWith('query:')) {\n this.search_query = ''\n this.$refs.search_field.focus()\n return\n }\n\n this.search_query = this.query.query\n this.search_param.limit = this.query.limit ? this.query.limit : 50\n this.search_param.offset = this.query.offset ? this.query.offset : 0\n\n this.$store.commit(types.ADD_RECENT_SEARCH, this.query.query)\n\n this.search_all()\n },\n\n spotify_search: function () {\n return webapi.spotify().then(({ data }) => {\n this.search_param.market = data.webapi_country\n\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(data.webapi_token)\n\n const types = this.query.type.split(',').filter(type => this.validSearchTypes.includes(type))\n return spotifyApi.search(this.query.query, types, this.search_param)\n })\n },\n\n search_all: function () {\n this.spotify_search().then(data => {\n this.tracks = data.tracks ? data.tracks : { items: [], total: 0 }\n this.artists = data.artists ? data.artists : { items: [], total: 0 }\n this.albums = data.albums ? data.albums : { items: [], total: 0 }\n this.playlists = data.playlists ? data.playlists : { items: [], total: 0 }\n })\n },\n\n search_tracks_next: function ($state) {\n this.spotify_search().then(data => {\n this.tracks.items = this.tracks.items.concat(data.tracks.items)\n this.tracks.total = data.tracks.total\n this.search_param.offset += data.tracks.limit\n\n $state.loaded()\n if (this.search_param.offset >= this.tracks.total) {\n $state.complete()\n }\n })\n },\n\n search_artists_next: function ($state) {\n this.spotify_search().then(data => {\n this.artists.items = this.artists.items.concat(data.artists.items)\n this.artists.total = data.artists.total\n this.search_param.offset += data.artists.limit\n\n $state.loaded()\n if (this.search_param.offset >= this.artists.total) {\n $state.complete()\n }\n })\n },\n\n search_albums_next: function ($state) {\n this.spotify_search().then(data => {\n this.albums.items = this.albums.items.concat(data.albums.items)\n this.albums.total = data.albums.total\n this.search_param.offset += data.albums.limit\n\n $state.loaded()\n if (this.search_param.offset >= this.albums.total) {\n $state.complete()\n }\n })\n },\n\n search_playlists_next: function ($state) {\n this.spotify_search().then(data => {\n this.playlists.items = this.playlists.items.concat(data.playlists.items)\n this.playlists.total = data.playlists.total\n this.search_param.offset += data.playlists.limit\n\n $state.loaded()\n if (this.search_param.offset >= this.playlists.total) {\n $state.complete()\n }\n })\n },\n\n new_search: function () {\n if (!this.search_query) {\n return\n }\n\n this.$router.push({\n path: '/search/spotify',\n query: {\n type: 'track,artist,album,playlist,audiobook,podcast',\n query: this.search_query,\n limit: 3,\n offset: 0\n }\n })\n this.$refs.search_field.blur()\n },\n\n open_search_tracks: function () {\n this.$router.push({\n path: '/search/spotify',\n query: {\n type: 'track',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_artists: function () {\n this.$router.push({\n path: '/search/spotify',\n query: {\n type: 'artist',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_albums: function () {\n this.$router.push({\n path: '/search/spotify',\n query: {\n type: 'album',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_playlists: function () {\n this.$router.push({\n path: '/search/spotify',\n query: {\n type: 'playlist',\n query: this.$route.query.query\n }\n })\n },\n\n open_recent_search: function (query) {\n this.search_query = query\n this.new_search()\n },\n\n open_track_dialog: function (track) {\n this.selected_track = track\n this.show_track_details_modal = true\n },\n\n open_album_dialog: function (album) {\n this.selected_album = album\n this.show_album_details_modal = true\n },\n\n open_artist_dialog: function (artist) {\n this.selected_artist = artist\n this.show_artist_details_modal = true\n },\n\n open_playlist_dialog: function (playlist) {\n this.selected_playlist = playlist\n this.show_playlist_details_modal = true\n },\n\n open_album: function (album) {\n this.$router.push({ path: '/music/spotify/albums/' + album.id })\n },\n\n artwork_url: function (album) {\n if (album.images && album.images.length > 0) {\n return album.images[0].url\n }\n return ''\n }\n },\n\n mounted: function () {\n this.query = this.$route.query\n this.search()\n },\n\n watch: {\n '$route' (to, from) {\n this.query = to.query\n this.search()\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageSearch.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageSearch.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyPageSearch.vue?vue&type=template&id=6fd13a6d&\"\nimport script from \"./SpotifyPageSearch.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyPageSearch.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-settings'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Navbar items\")])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"content\"},[_vm._v(\" Select the top navigation bar menu items \")]),_c('div',{staticClass:\"notification is-size-7\"},[_vm._v(\" If you select more items than can be shown on your screen then the burger menu will disappear. \")]),_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_menu_item_playlists\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Playlists\")])],2),_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_menu_item_music\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Music\")])],2),_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_menu_item_podcasts\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Podcasts\")])],2),_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_menu_item_audiobooks\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Audiobooks\")])],2),_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_menu_item_radio\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Radio\")])],2),_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_menu_item_files\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Files\")])],2),_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_menu_item_search\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Search\")])],2)],1)],2),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Album lists\")])]),_c('template',{slot:\"content\"},[_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_cover_artwork_in_album_lists\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Show cover artwork in album list\")])],2)],1)],2),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Now playing page\")])]),_c('template',{slot:\"content\"},[_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_composer_now_playing\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Show composer\")]),_c('template',{slot:\"info\"},[_vm._v(\"If enabled the composer of the current playing track is shown on the \\\"now playing page\\\"\")])],2),_c('settings-textfield',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_composer_for_genre\",\"disabled\":!_vm.settings_option_show_composer_now_playing,\"placeholder\":\"Genres\"}},[_c('template',{slot:\"label\"},[_vm._v(\"Show composer only for listed genres\")]),_c('template',{slot:\"info\"},[_c('p',{staticClass:\"help\"},[_vm._v(\" Comma separated list of genres the composer should be displayed on the \\\"now playing page\\\". \")]),_c('p',{staticClass:\"help\"},[_vm._v(\" Leave empty to always show the composer. \")]),_c('p',{staticClass:\"help\"},[_vm._v(\" The genre tag of the current track is matched by checking, if one of the defined genres are included. For example setting to \"),_c('code',[_vm._v(\"classical, soundtrack\")]),_vm._v(\" will show the composer for tracks with a genre tag of \\\"Contemporary Classical\\\".\"),_c('br')])])],2)],1)],2),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Recently added page\")])]),_c('template',{slot:\"content\"},[_c('settings-intfield',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"recently_added_limit\"}},[_c('template',{slot:\"label\"},[_vm._v(\"Limit the number of albums shown on the \\\"Recently Added\\\" page\")])],2)],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"section fd-tabs-section\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('div',{staticClass:\"tabs is-centered is-small\"},[_c('ul',[_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/settings/webinterface\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{},[_vm._v(\"Webinterface\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/settings/remotes-outputs\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{},[_vm._v(\"Remotes & Outputs\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/settings/artwork\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{},[_vm._v(\"Artwork\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/settings/online-services\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{},[_vm._v(\"Online Services\")])])])],1)])])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section class=\"section fd-tabs-section\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <div class=\"tabs is-centered is-small\">\n <ul>\n <router-link tag=\"li\" to=\"/settings/webinterface\" active-class=\"is-active\">\n <a>\n <span class=\"\">Webinterface</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/settings/remotes-outputs\" active-class=\"is-active\">\n <a>\n <span class=\"\">Remotes & Outputs</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/settings/artwork\" active-class=\"is-active\">\n <a>\n <span class=\"\">Artwork</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/settings/online-services\" active-class=\"is-active\">\n <a>\n <span class=\"\">Online Services</span>\n </a>\n </router-link>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </section>\n</template>\n\n<script>\nexport default {\n name: 'TabsSettings',\n\n computed: {\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsSettings.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsSettings.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TabsSettings.vue?vue&type=template&id=6c0a7918&\"\nimport script from \"./TabsSettings.vue?vue&type=script&lang=js&\"\nexport * from \"./TabsSettings.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"field\"},[_c('label',{staticClass:\"checkbox\"},[_c('input',{ref:\"settings_checkbox\",attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.value},on:{\"change\":_vm.set_update_timer}}),_vm._t(\"label\"),_c('i',{staticClass:\"is-size-7\",class:{\n 'has-text-info': _vm.statusUpdate === 'success',\n 'has-text-danger': _vm.statusUpdate === 'error'\n }},[_vm._v(\" \"+_vm._s(_vm.info))])],2),(_vm.$slots['info'])?_c('p',{staticClass:\"help\"},[_vm._t(\"info\")],2):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"field\">\n <label class=\"checkbox\">\n <input type=\"checkbox\"\n :checked=\"value\"\n @change=\"set_update_timer\"\n ref=\"settings_checkbox\">\n <slot name=\"label\"></slot>\n <i class=\"is-size-7\"\n :class=\"{\n 'has-text-info': statusUpdate === 'success',\n 'has-text-danger': statusUpdate === 'error'\n }\"> {{ info }}</i>\n </label>\n <p class=\"help\" v-if=\"$slots['info']\">\n <slot name=\"info\"></slot>\n </p>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'SettingsCheckbox',\n\n props: ['category_name', 'option_name'],\n\n data () {\n return {\n timerDelay: 2000,\n timerId: -1,\n\n // <empty>: default/no changes, 'success': update succesful, 'error': update failed\n statusUpdate: ''\n }\n },\n\n computed: {\n category () {\n return this.$store.state.settings.categories.find(elem => elem.name === this.category_name)\n },\n\n option () {\n if (!this.category) {\n return {}\n }\n return this.category.options.find(elem => elem.name === this.option_name)\n },\n\n value () {\n return this.option.value\n },\n\n info () {\n if (this.statusUpdate === 'success') {\n return '(setting saved)'\n } else if (this.statusUpdate === 'error') {\n return '(error saving setting)'\n }\n return ''\n }\n },\n\n methods: {\n set_update_timer () {\n if (this.timerId > 0) {\n window.clearTimeout(this.timerId)\n this.timerId = -1\n }\n\n this.statusUpdate = ''\n const newValue = this.$refs.settings_checkbox.checked\n if (newValue !== this.value) {\n this.timerId = window.setTimeout(this.update_setting, this.timerDelay)\n }\n },\n\n update_setting () {\n this.timerId = -1\n\n const newValue = this.$refs.settings_checkbox.checked\n if (newValue === this.value) {\n this.statusUpdate = ''\n return\n }\n\n const option = {\n category: this.category.name,\n name: this.option_name,\n value: newValue\n }\n webapi.settings_update(this.category.name, option).then(() => {\n this.$store.commit(types.UPDATE_SETTINGS_OPTION, option)\n this.statusUpdate = 'success'\n }).catch(() => {\n this.statusUpdate = 'error'\n this.$refs.settings_checkbox.checked = this.value\n }).finally(() => {\n this.timerId = window.setTimeout(this.clear_status, this.timerDelay)\n })\n },\n\n clear_status: function () {\n this.statusUpdate = ''\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsCheckbox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsCheckbox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SettingsCheckbox.vue?vue&type=template&id=f722b06c&\"\nimport script from \"./SettingsCheckbox.vue?vue&type=script&lang=js&\"\nexport * from \"./SettingsCheckbox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('fieldset',{attrs:{\"disabled\":_vm.disabled}},[_c('div',{staticClass:\"field\"},[_c('label',{staticClass:\"label has-text-weight-normal\"},[_vm._t(\"label\"),_c('i',{staticClass:\"is-size-7\",class:{\n 'has-text-info': _vm.statusUpdate === 'success',\n 'has-text-danger': _vm.statusUpdate === 'error'\n }},[_vm._v(\" \"+_vm._s(_vm.info))])],2),_c('div',{staticClass:\"control\"},[_c('input',{ref:\"settings_text\",staticClass:\"input\",attrs:{\"type\":\"text\",\"placeholder\":_vm.placeholder},domProps:{\"value\":_vm.value},on:{\"input\":_vm.set_update_timer}})]),(_vm.$slots['info'])?_c('p',{staticClass:\"help\"},[_vm._t(\"info\")],2):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <fieldset :disabled=\"disabled\">\n <div class=\"field\">\n <label class=\"label has-text-weight-normal\">\n <slot name=\"label\"></slot>\n <i class=\"is-size-7\"\n :class=\"{\n 'has-text-info': statusUpdate === 'success',\n 'has-text-danger': statusUpdate === 'error'\n }\"> {{ info }}</i>\n </label>\n <div class=\"control\">\n <input class=\"input\" type=\"text\" :placeholder=\"placeholder\"\n :value=\"value\"\n @input=\"set_update_timer\"\n ref=\"settings_text\">\n </div>\n <p class=\"help\" v-if=\"$slots['info']\">\n <slot name=\"info\"></slot>\n </p>\n </div>\n </fieldset>\n</template>\n\n<script>\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'SettingsTextfield',\n\n props: ['category_name', 'option_name', 'placeholder', 'disabled'],\n\n data () {\n return {\n timerDelay: 2000,\n timerId: -1,\n\n // <empty>: default/no changes, 'success': update succesful, 'error': update failed\n statusUpdate: ''\n }\n },\n\n computed: {\n category () {\n return this.$store.state.settings.categories.find(elem => elem.name === this.category_name)\n },\n\n option () {\n if (!this.category) {\n return {}\n }\n return this.category.options.find(elem => elem.name === this.option_name)\n },\n\n value () {\n return this.option.value\n },\n\n info () {\n if (this.statusUpdate === 'success') {\n return '(setting saved)'\n } else if (this.statusUpdate === 'error') {\n return '(error saving setting)'\n }\n return ''\n }\n },\n\n methods: {\n set_update_timer () {\n if (this.timerId > 0) {\n window.clearTimeout(this.timerId)\n this.timerId = -1\n }\n\n this.statusUpdate = ''\n const newValue = this.$refs.settings_text.value\n if (newValue !== this.value) {\n this.timerId = window.setTimeout(this.update_setting, this.timerDelay)\n }\n },\n\n update_setting () {\n this.timerId = -1\n\n const newValue = this.$refs.settings_text.value\n if (newValue === this.value) {\n this.statusUpdate = ''\n return\n }\n\n const option = {\n category: this.category.name,\n name: this.option_name,\n value: newValue\n }\n webapi.settings_update(this.category.name, option).then(() => {\n this.$store.commit(types.UPDATE_SETTINGS_OPTION, option)\n this.statusUpdate = 'success'\n }).catch(() => {\n this.statusUpdate = 'error'\n this.$refs.settings_text.value = this.value\n }).finally(() => {\n this.timerId = window.setTimeout(this.clear_status, this.timerDelay)\n })\n },\n\n clear_status: function () {\n this.statusUpdate = ''\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsTextfield.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsTextfield.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SettingsTextfield.vue?vue&type=template&id=4cc6d5ec&\"\nimport script from \"./SettingsTextfield.vue?vue&type=script&lang=js&\"\nexport * from \"./SettingsTextfield.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('fieldset',{attrs:{\"disabled\":_vm.disabled}},[_c('div',{staticClass:\"field\"},[_c('label',{staticClass:\"label has-text-weight-normal\"},[_vm._t(\"label\"),_c('i',{staticClass:\"is-size-7\",class:{\n 'has-text-info': _vm.statusUpdate === 'success',\n 'has-text-danger': _vm.statusUpdate === 'error'\n }},[_vm._v(\" \"+_vm._s(_vm.info))])],2),_c('div',{staticClass:\"control\"},[_c('input',{ref:\"settings_number\",staticClass:\"input\",staticStyle:{\"width\":\"10em\"},attrs:{\"type\":\"number\",\"min\":\"0\",\"placeholder\":_vm.placeholder},domProps:{\"value\":_vm.value},on:{\"input\":_vm.set_update_timer}})]),(_vm.$slots['info'])?_c('p',{staticClass:\"help\"},[_vm._t(\"info\")],2):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <fieldset :disabled=\"disabled\">\n <div class=\"field\">\n <label class=\"label has-text-weight-normal\">\n <slot name=\"label\"></slot>\n <i class=\"is-size-7\"\n :class=\"{\n 'has-text-info': statusUpdate === 'success',\n 'has-text-danger': statusUpdate === 'error'\n }\"> {{ info }}</i>\n </label>\n <div class=\"control\">\n <input class=\"input\"\n type=\"number\"\n min=\"0\"\n style=\"width: 10em;\"\n :placeholder=\"placeholder\"\n :value=\"value\"\n @input=\"set_update_timer\"\n ref=\"settings_number\">\n </div>\n <p class=\"help\" v-if=\"$slots['info']\">\n <slot name=\"info\"></slot>\n </p>\n </div>\n </fieldset>\n</template>\n\n<script>\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'SettingsIntfield',\n\n props: ['category_name', 'option_name', 'placeholder', 'disabled'],\n\n data () {\n return {\n timerDelay: 2000,\n timerId: -1,\n\n statusUpdate: ''\n }\n },\n\n computed: {\n category () {\n return this.$store.state.settings.categories.find(elem => elem.name === this.category_name)\n },\n\n option () {\n if (!this.category) {\n return {}\n }\n return this.category.options.find(elem => elem.name === this.option_name)\n },\n\n value () {\n return this.option.value\n },\n\n info () {\n if (this.statusUpdate === 'success') {\n return '(setting saved)'\n } else if (this.statusUpdate === 'error') {\n return '(error saving setting)'\n }\n return ''\n }\n },\n\n methods: {\n set_update_timer () {\n if (this.timerId > 0) {\n window.clearTimeout(this.timerId)\n this.timerId = -1\n }\n\n this.statusUpdate = ''\n const newValue = this.$refs.settings_number.value\n if (newValue !== this.value) {\n this.timerId = window.setTimeout(this.update_setting, this.timerDelay)\n }\n },\n\n update_setting () {\n this.timerId = -1\n\n const newValue = this.$refs.settings_number.value\n if (newValue === this.value) {\n this.statusUpdate = ''\n return\n }\n\n const option = {\n category: this.category.name,\n name: this.option_name,\n value: parseInt(newValue, 10)\n }\n webapi.settings_update(this.category.name, option).then(() => {\n this.$store.commit(types.UPDATE_SETTINGS_OPTION, option)\n this.statusUpdate = 'success'\n }).catch(() => {\n this.statusUpdate = 'error'\n this.$refs.settings_number.value = this.value\n }).finally(() => {\n this.timerId = window.setTimeout(this.clear_status, this.timerDelay)\n })\n },\n\n clear_status: function () {\n this.statusUpdate = ''\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsIntfield.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsIntfield.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SettingsIntfield.vue?vue&type=template&id=3bf31942&\"\nimport script from \"./SettingsIntfield.vue?vue&type=script&lang=js&\"\nexport * from \"./SettingsIntfield.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <tabs-settings></tabs-settings>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Navbar items</div>\n </template>\n\n <template slot=\"content\">\n <p class=\"content\">\n Select the top navigation bar menu items\n </p>\n <div class=\"notification is-size-7\">\n If you select more items than can be shown on your screen then the burger menu will disappear.\n </div>\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_menu_item_playlists\">\n <template slot=\"label\"> Playlists</template>\n </settings-checkbox>\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_menu_item_music\">\n <template slot=\"label\"> Music</template>\n </settings-checkbox>\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_menu_item_podcasts\">\n <template slot=\"label\"> Podcasts</template>\n </settings-checkbox>\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_menu_item_audiobooks\">\n <template slot=\"label\"> Audiobooks</template>\n </settings-checkbox>\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_menu_item_radio\">\n <template slot=\"label\"> Radio</template>\n </settings-checkbox>\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_menu_item_files\">\n <template slot=\"label\"> Files</template>\n </settings-checkbox>\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_menu_item_search\">\n <template slot=\"label\"> Search</template>\n </settings-checkbox>\n </template>\n </content-with-heading>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Album lists</div>\n </template>\n\n <template slot=\"content\">\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_cover_artwork_in_album_lists\">\n <template slot=\"label\"> Show cover artwork in album list</template>\n </settings-checkbox>\n </template>\n </content-with-heading>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Now playing page</div>\n </template>\n\n <template slot=\"content\">\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_composer_now_playing\">\n <template slot=\"label\"> Show composer</template>\n <template slot=\"info\">If enabled the composer of the current playing track is shown on the "now playing page"</template>\n </settings-checkbox>\n <settings-textfield category_name=\"webinterface\" option_name=\"show_composer_for_genre\"\n :disabled=\"!settings_option_show_composer_now_playing\"\n placeholder=\"Genres\">\n <template slot=\"label\">Show composer only for listed genres</template>\n <template slot=\"info\">\n <p class=\"help\">\n Comma separated list of genres the composer should be displayed on the "now playing page".\n </p>\n <p class=\"help\">\n Leave empty to always show the composer.\n </p>\n <p class=\"help\">\n The genre tag of the current track is matched by checking, if one of the defined genres are included.\n For example setting to <code>classical, soundtrack</code> will show the composer for tracks with\n a genre tag of "Contemporary Classical".<br>\n </p>\n </template>\n </settings-textfield>\n </template>\n </content-with-heading>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Recently added page</div>\n </template>\n\n <template slot=\"content\">\n <settings-intfield category_name=\"webinterface\" option_name=\"recently_added_limit\">\n <template slot=\"label\">Limit the number of albums shown on the \"Recently Added\" page</template>\n </settings-intfield>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsSettings from '@/components/TabsSettings'\nimport SettingsCheckbox from '@/components/SettingsCheckbox'\nimport SettingsTextfield from '@/components/SettingsTextfield'\nimport SettingsIntfield from '@/components/SettingsIntfield'\n\nexport default {\n name: 'SettingsPageWebinterface',\n components: { ContentWithHeading, TabsSettings, SettingsCheckbox, SettingsTextfield, SettingsIntfield },\n\n computed: {\n settings_option_show_composer_now_playing () {\n return this.$store.getters.settings_option_show_composer_now_playing\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsPageWebinterface.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsPageWebinterface.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SettingsPageWebinterface.vue?vue&type=template&id=caf7e2e0&\"\nimport script from \"./SettingsPageWebinterface.vue?vue&type=script&lang=js&\"\nexport * from \"./SettingsPageWebinterface.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-settings'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Artwork\")])]),_c('template',{slot:\"content\"},[_c('div',{staticClass:\"content\"},[_c('p',[_vm._v(\" OwnTone supports PNG and JPEG artwork which is either placed as separate image files in the library, embedded in the media files or made available online by radio stations. \")]),_c('p',[_vm._v(\"In addition to that, you can enable fetching artwork from the following artwork providers:\")])]),(_vm.spotify.libspotify_logged_in)?_c('settings-checkbox',{attrs:{\"category_name\":\"artwork\",\"option_name\":\"use_artwork_source_spotify\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Spotify\")])],2):_vm._e(),_c('settings-checkbox',{attrs:{\"category_name\":\"artwork\",\"option_name\":\"use_artwork_source_discogs\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Discogs (\"),_c('a',{attrs:{\"href\":\"https://www.discogs.com/\"}},[_vm._v(\"https://www.discogs.com/\")]),_vm._v(\")\")])],2),_c('settings-checkbox',{attrs:{\"category_name\":\"artwork\",\"option_name\":\"use_artwork_source_coverartarchive\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Cover Art Archive (\"),_c('a',{attrs:{\"href\":\"https://coverartarchive.org/\"}},[_vm._v(\"https://coverartarchive.org/\")]),_vm._v(\")\")])],2)],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-settings></tabs-settings>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Artwork</div>\n </template>\n\n <template slot=\"content\">\n <div class=\"content\">\n <p>\n OwnTone supports PNG and JPEG artwork which is either placed as separate image files in the library,\n embedded in the media files or made available online by radio stations.\n </p>\n <p>In addition to that, you can enable fetching artwork from the following artwork providers:</p>\n </div>\n <settings-checkbox category_name=\"artwork\" option_name=\"use_artwork_source_spotify\" v-if=\"spotify.libspotify_logged_in\">\n <template slot=\"label\"> Spotify</template>\n </settings-checkbox>\n <settings-checkbox category_name=\"artwork\" option_name=\"use_artwork_source_discogs\">\n <template slot=\"label\"> Discogs (<a href=\"https://www.discogs.com/\">https://www.discogs.com/</a>)</template>\n </settings-checkbox>\n <settings-checkbox category_name=\"artwork\" option_name=\"use_artwork_source_coverartarchive\">\n <template slot=\"label\"> Cover Art Archive (<a href=\"https://coverartarchive.org/\">https://coverartarchive.org/</a>)</template>\n </settings-checkbox>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsSettings from '@/components/TabsSettings'\nimport SettingsCheckbox from '@/components/SettingsCheckbox'\n\nexport default {\n name: 'SettingsPageArtwork',\n components: { ContentWithHeading, TabsSettings, SettingsCheckbox },\n\n computed: {\n spotify () {\n return this.$store.state.spotify\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsPageArtwork.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsPageArtwork.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SettingsPageArtwork.vue?vue&type=template&id=1ccfba01&\"\nimport script from \"./SettingsPageArtwork.vue?vue&type=script&lang=js&\"\nexport * from \"./SettingsPageArtwork.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-settings'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Spotify\")])]),_c('template',{slot:\"content\"},[(!_vm.spotify.spotify_installed)?_c('div',{staticClass:\"notification is-size-7\"},[_c('p',[_vm._v(\"OwnTone was either built without support for Spotify or libspotify is not installed.\")])]):_vm._e(),(_vm.spotify.spotify_installed)?_c('div',[_c('div',{staticClass:\"notification is-size-7\"},[_c('b',[_vm._v(\"You must have a Spotify premium account\")]),_vm._v(\". \"),(_vm.use_libspotity)?_c('span',[_vm._v(\"If you normally log into Spotify with your Facebook account you must first go to Spotify's web site where you can get the Spotify username and password that matches your account.\")]):_vm._e()]),(_vm.use_libspotity)?_c('div',[_c('p',{staticClass:\"content\"},[_c('b',[_vm._v(\"libspotify\")]),_vm._v(\" - Login with your Spotify username and password \")]),(_vm.spotify.libspotify_logged_in)?_c('p',{staticClass:\"fd-has-margin-bottom\"},[_vm._v(\" Logged in as \"),_c('b',[_c('code',[_vm._v(_vm._s(_vm.spotify.libspotify_user))])])]):_vm._e(),(_vm.spotify.spotify_installed && !_vm.spotify.libspotify_logged_in)?_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.login_libspotify.apply(null, arguments)}}},[_c('div',{staticClass:\"field is-grouped\"},[_c('div',{staticClass:\"control is-expanded\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.libspotify.user),expression:\"libspotify.user\"}],staticClass:\"input\",attrs:{\"type\":\"text\",\"placeholder\":\"Username\"},domProps:{\"value\":(_vm.libspotify.user)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.libspotify, \"user\", $event.target.value)}}}),_c('p',{staticClass:\"help is-danger\"},[_vm._v(_vm._s(_vm.libspotify.errors.user))])]),_c('div',{staticClass:\"control is-expanded\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.libspotify.password),expression:\"libspotify.password\"}],staticClass:\"input\",attrs:{\"type\":\"password\",\"placeholder\":\"Password\"},domProps:{\"value\":(_vm.libspotify.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.libspotify, \"password\", $event.target.value)}}}),_c('p',{staticClass:\"help is-danger\"},[_vm._v(_vm._s(_vm.libspotify.errors.password))])]),_c('div',{staticClass:\"control\"},[_c('button',{staticClass:\"button is-info\"},[_vm._v(\"Login\")])])])]):_vm._e(),_c('p',{staticClass:\"help is-danger\"},[_vm._v(_vm._s(_vm.libspotify.errors.error))]),_c('p',{staticClass:\"help\"},[_vm._v(\" libspotify enables OwnTone to play Spotify tracks. \")]),_c('p',{staticClass:\"help\"},[_vm._v(\" OwnTone will not store your password, but will still be able to log you in automatically afterwards, because libspotify saves a login token. \")])]):_vm._e(),_c('div',{staticClass:\"fd-has-margin-top\"},[_c('p',{staticClass:\"content\"},[_c('b',[_vm._v(\"Spotify Web API\")]),_vm._v(\" - Grant access to the Spotify Web API \")]),(_vm.spotify.webapi_token_valid)?_c('p',[_vm._v(\" Access granted for \"),_c('b',[_c('code',[_vm._v(_vm._s(_vm.spotify.webapi_user))])])]):_vm._e(),(_vm.spotify_missing_scope.length > 0)?_c('p',{staticClass:\"help is-danger\"},[_vm._v(\" Please reauthorize Web API access to grant OwnTone the following additional access rights: \"),_c('b',[_c('code',[_vm._v(_vm._s(_vm._f(\"join\")(_vm.spotify_missing_scope)))])])]):_vm._e(),_c('div',{staticClass:\"field fd-has-margin-top \"},[_c('div',{staticClass:\"control\"},[_c('a',{staticClass:\"button\",class:{ 'is-info': !_vm.spotify.webapi_token_valid || _vm.spotify_missing_scope.length > 0 },attrs:{\"href\":_vm.spotify.oauth_uri}},[_vm._v(\"Authorize Web API access\")])])]),_c('p',{staticClass:\"help\"},[_vm._v(\" Access to the Spotify Web API enables scanning of your Spotify library. Required scopes are \"),_c('code',[_vm._v(_vm._s(_vm._f(\"join\")(_vm.spotify_required_scope)))]),_vm._v(\". \")]),(_vm.spotify.webapi_token_valid)?_c('div',{staticClass:\"field fd-has-margin-top \"},[_c('div',{staticClass:\"control\"},[_c('a',{staticClass:\"button is-danger\",on:{\"click\":_vm.logout_spotify}},[_vm._v(\"Logout\")])])]):_vm._e()])]):_vm._e()])],2),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Last.fm\")])]),_c('template',{slot:\"content\"},[(!_vm.lastfm.enabled)?_c('div',{staticClass:\"notification is-size-7\"},[_c('p',[_vm._v(\"OwnTone was built without support for Last.fm.\")])]):_vm._e(),(_vm.lastfm.enabled)?_c('div',[_c('p',{staticClass:\"content\"},[_c('b',[_vm._v(\"Last.fm\")]),_vm._v(\" - Login with your Last.fm username and password to enable scrobbling \")]),(_vm.lastfm.scrobbling_enabled)?_c('div',[_c('a',{staticClass:\"button\",on:{\"click\":_vm.logoutLastfm}},[_vm._v(\"Stop scrobbling\")])]):_vm._e(),(!_vm.lastfm.scrobbling_enabled)?_c('div',[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.login_lastfm.apply(null, arguments)}}},[_c('div',{staticClass:\"field is-grouped\"},[_c('div',{staticClass:\"control is-expanded\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.lastfm_login.user),expression:\"lastfm_login.user\"}],staticClass:\"input\",attrs:{\"type\":\"text\",\"placeholder\":\"Username\"},domProps:{\"value\":(_vm.lastfm_login.user)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.lastfm_login, \"user\", $event.target.value)}}}),_c('p',{staticClass:\"help is-danger\"},[_vm._v(_vm._s(_vm.lastfm_login.errors.user))])]),_c('div',{staticClass:\"control is-expanded\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.lastfm_login.password),expression:\"lastfm_login.password\"}],staticClass:\"input\",attrs:{\"type\":\"password\",\"placeholder\":\"Password\"},domProps:{\"value\":(_vm.lastfm_login.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.lastfm_login, \"password\", $event.target.value)}}}),_c('p',{staticClass:\"help is-danger\"},[_vm._v(_vm._s(_vm.lastfm_login.errors.password))])]),_c('div',{staticClass:\"control\"},[_c('button',{staticClass:\"button is-info\",attrs:{\"type\":\"submit\"}},[_vm._v(\"Login\")])])]),_c('p',{staticClass:\"help is-danger\"},[_vm._v(_vm._s(_vm.lastfm_login.errors.error))]),_c('p',{staticClass:\"help\"},[_vm._v(\" OwnTone will not store your Last.fm username/password, only the session key. The session key does not expire. \")])])]):_vm._e()]):_vm._e()])],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-settings></tabs-settings>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Spotify</div>\n </template>\n\n <template slot=\"content\">\n <div class=\"notification is-size-7\" v-if=\"!spotify.spotify_installed\">\n <p>OwnTone was either built without support for Spotify or libspotify is not installed.</p>\n </div>\n <div v-if=\"spotify.spotify_installed\">\n <div class=\"notification is-size-7\">\n <b>You must have a Spotify premium account</b>. <span v-if=\"use_libspotity\">If you normally log into Spotify with your Facebook account you must first go to Spotify's web site where you can get the Spotify username and password that matches your account.</span>\n </div>\n\n <div v-if=\"use_libspotity\">\n <p class=\"content\">\n <b>libspotify</b> - Login with your Spotify username and password\n </p>\n <p v-if=\"spotify.libspotify_logged_in\" class=\"fd-has-margin-bottom\">\n Logged in as <b><code>{{ spotify.libspotify_user }}</code></b>\n </p>\n <form v-if=\"spotify.spotify_installed && !spotify.libspotify_logged_in\" @submit.prevent=\"login_libspotify\">\n <div class=\"field is-grouped\">\n <div class=\"control is-expanded\">\n <input class=\"input\" type=\"text\" placeholder=\"Username\" v-model=\"libspotify.user\">\n <p class=\"help is-danger\">{{ libspotify.errors.user }}</p>\n </div>\n <div class=\"control is-expanded\">\n <input class=\"input\" type=\"password\" placeholder=\"Password\" v-model=\"libspotify.password\">\n <p class=\"help is-danger\">{{ libspotify.errors.password }}</p>\n </div>\n <div class=\"control\">\n <button class=\"button is-info\">Login</button>\n </div>\n </div>\n </form>\n <p class=\"help is-danger\">{{ libspotify.errors.error }}</p>\n <p class=\"help\">\n libspotify enables OwnTone to play Spotify tracks.\n </p>\n <p class=\"help\">\n OwnTone will not store your password, but will still be able to log you in automatically afterwards, because libspotify saves a login token.\n </p>\n </div>\n\n <div class=\"fd-has-margin-top\">\n <p class=\"content\">\n <b>Spotify Web API</b> - Grant access to the Spotify Web API\n </p>\n <p v-if=\"spotify.webapi_token_valid\">\n Access granted for <b><code>{{ spotify.webapi_user }}</code></b>\n </p>\n <p class=\"help is-danger\" v-if=\"spotify_missing_scope.length > 0\">\n Please reauthorize Web API access to grant OwnTone the following additional access rights:\n <b><code>{{ spotify_missing_scope | join }}</code></b>\n </p>\n <div class=\"field fd-has-margin-top \">\n <div class=\"control\">\n <a class=\"button\" :class=\"{ 'is-info': !spotify.webapi_token_valid || spotify_missing_scope.length > 0 }\" :href=\"spotify.oauth_uri\">Authorize Web API access</a>\n </div>\n </div>\n <p class=\"help\">\n Access to the Spotify Web API enables scanning of your Spotify library. Required scopes are\n <code>{{ spotify_required_scope | join }}</code>.\n </p>\n <div v-if=\"spotify.webapi_token_valid\" class=\"field fd-has-margin-top \">\n <div class=\"control\">\n <a class=\"button is-danger\" @click=\"logout_spotify\">Logout</a>\n </div>\n </div>\n </div>\n </div>\n </template>\n </content-with-heading>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Last.fm</div>\n </template>\n\n <template slot=\"content\">\n <div class=\"notification is-size-7\" v-if=\"!lastfm.enabled\">\n <p>OwnTone was built without support for Last.fm.</p>\n </div>\n <div v-if=\"lastfm.enabled\">\n <p class=\"content\">\n <b>Last.fm</b> - Login with your Last.fm username and password to enable scrobbling\n </p>\n <div v-if=\"lastfm.scrobbling_enabled\">\n <a class=\"button\" @click=\"logoutLastfm\">Stop scrobbling</a>\n </div>\n <div v-if=\"!lastfm.scrobbling_enabled\">\n <form @submit.prevent=\"login_lastfm\">\n <div class=\"field is-grouped\">\n <div class=\"control is-expanded\">\n <input class=\"input\" type=\"text\" placeholder=\"Username\" v-model=\"lastfm_login.user\">\n <p class=\"help is-danger\">{{ lastfm_login.errors.user }}</p>\n </div>\n <div class=\"control is-expanded\">\n <input class=\"input\" type=\"password\" placeholder=\"Password\" v-model=\"lastfm_login.password\">\n <p class=\"help is-danger\">{{ lastfm_login.errors.password }}</p>\n </div>\n <div class=\"control\">\n <button class=\"button is-info\" type=\"submit\">Login</button>\n </div>\n </div>\n <p class=\"help is-danger\">{{ lastfm_login.errors.error }}</p>\n <p class=\"help\">\n OwnTone will not store your Last.fm username/password, only the session key. The session key does not expire.\n </p>\n </form>\n </div>\n </div>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsSettings from '@/components/TabsSettings'\nimport webapi from '@/webapi'\n\nexport default {\n name: 'SettingsPageOnlineServices',\n components: { ContentWithHeading, TabsSettings },\n\n data () {\n return {\n libspotify: { user: '', password: '', errors: { user: '', password: '', error: '' } },\n lastfm_login: { user: '', password: '', errors: { user: '', password: '', error: '' } }\n }\n },\n\n computed: {\n lastfm () {\n return this.$store.state.lastfm\n },\n\n spotify () {\n return this.$store.state.spotify\n },\n\n spotify_required_scope () {\n if (this.spotify.webapi_required_scope) {\n return this.spotify.webapi_required_scope.split(' ')\n }\n return []\n },\n\n spotify_missing_scope () {\n if (this.spotify.webapi_token_valid && this.spotify.webapi_granted_scope && this.spotify.webapi_required_scope) {\n return this.spotify.webapi_required_scope.split(' ').filter(scope => this.spotify.webapi_granted_scope.indexOf(scope) < 0)\n }\n return []\n },\n\n use_libspotify () {\n return this.$store.state.config.use_libspotify\n }\n },\n\n methods: {\n login_libspotify () {\n webapi.spotify_login(this.libspotify).then(response => {\n this.libspotify.user = ''\n this.libspotify.password = ''\n this.libspotify.errors.user = ''\n this.libspotify.errors.password = ''\n this.libspotify.errors.error = ''\n\n if (!response.data.success) {\n this.libspotify.errors.user = response.data.errors.user\n this.libspotify.errors.password = response.data.errors.password\n this.libspotify.errors.error = response.data.errors.error\n }\n })\n },\n\n logout_spotify () {\n webapi.spotify_logout()\n },\n\n login_lastfm () {\n webapi.lastfm_login(this.lastfm_login).then(response => {\n this.lastfm_login.user = ''\n this.lastfm_login.password = ''\n this.lastfm_login.errors.user = ''\n this.lastfm_login.errors.password = ''\n this.lastfm_login.errors.error = ''\n\n if (!response.data.success) {\n this.lastfm_login.errors.user = response.data.errors.user\n this.lastfm_login.errors.password = response.data.errors.password\n this.lastfm_login.errors.error = response.data.errors.error\n }\n })\n },\n\n logoutLastfm () {\n webapi.lastfm_logout()\n }\n },\n\n filters: {\n join (array) {\n return array.join(', ')\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsPageOnlineServices.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsPageOnlineServices.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SettingsPageOnlineServices.vue?vue&type=template&id=3b0360d7&\"\nimport script from \"./SettingsPageOnlineServices.vue?vue&type=script&lang=js&\"\nexport * from \"./SettingsPageOnlineServices.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-settings'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Remote Pairing\")])]),_c('template',{slot:\"content\"},[(_vm.pairing.active)?_c('div',{staticClass:\"notification\"},[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.kickoff_pairing.apply(null, arguments)}}},[_c('label',{staticClass:\"label has-text-weight-normal\"},[_vm._v(\" Remote pairing request from \"),_c('b',[_vm._v(_vm._s(_vm.pairing.remote))])]),_c('div',{staticClass:\"field is-grouped\"},[_c('div',{staticClass:\"control\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.pairing_req.pin),expression:\"pairing_req.pin\"}],staticClass:\"input\",attrs:{\"type\":\"text\",\"placeholder\":\"Enter pairing code\"},domProps:{\"value\":(_vm.pairing_req.pin)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.pairing_req, \"pin\", $event.target.value)}}})]),_c('div',{staticClass:\"control\"},[_c('button',{staticClass:\"button is-info\",attrs:{\"type\":\"submit\"}},[_vm._v(\"Send\")])])])])]):_vm._e(),(!_vm.pairing.active)?_c('div',{staticClass:\"content\"},[_c('p',[_vm._v(\"No active pairing request.\")])]):_vm._e()])],2),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Speaker pairing and device verification\")])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"content\"},[_vm._v(\" If your speaker requires pairing then activate it below and enter the PIN that it displays. \")]),_vm._l((_vm.outputs),function(output){return _c('div',{key:output.id},[_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control\"},[_c('label',{staticClass:\"checkbox\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(output.selected),expression:\"output.selected\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(output.selected)?_vm._i(output.selected,null)>-1:(output.selected)},on:{\"change\":[function($event){var $$a=output.selected,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(output, \"selected\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(output, \"selected\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(output, \"selected\", $$c)}},function($event){return _vm.output_toggle(output.id)}]}}),_vm._v(\" \"+_vm._s(output.name)+\" \")])])]),(output.needs_auth_key)?_c('form',{staticClass:\"fd-has-margin-bottom\",on:{\"submit\":function($event){$event.preventDefault();return _vm.kickoff_verification(output.id)}}},[_c('div',{staticClass:\"field is-grouped\"},[_c('div',{staticClass:\"control\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.verification_req.pin),expression:\"verification_req.pin\"}],staticClass:\"input\",attrs:{\"type\":\"text\",\"placeholder\":\"Enter verification code\"},domProps:{\"value\":(_vm.verification_req.pin)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.verification_req, \"pin\", $event.target.value)}}})]),_c('div',{staticClass:\"control\"},[_c('button',{staticClass:\"button is-info\",attrs:{\"type\":\"submit\"}},[_vm._v(\"Verify\")])])])]):_vm._e()])})],2)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-settings></tabs-settings>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Remote Pairing</div>\n </template>\n\n <template slot=\"content\">\n <!-- Paring request active -->\n <div class=\"notification\" v-if=\"pairing.active\">\n <form v-on:submit.prevent=\"kickoff_pairing\">\n <label class=\"label has-text-weight-normal\">\n Remote pairing request from <b>{{ pairing.remote }}</b>\n </label>\n <div class=\"field is-grouped\">\n <div class=\"control\">\n <input class=\"input\" type=\"text\" placeholder=\"Enter pairing code\" v-model=\"pairing_req.pin\">\n </div>\n <div class=\"control\">\n <button class=\"button is-info\" type=\"submit\">Send</button>\n </div>\n </div>\n </form>\n </div>\n <!-- No pairing requests -->\n <div class=\"content\" v-if=\"!pairing.active\">\n <p>No active pairing request.</p>\n </div>\n </template>\n </content-with-heading>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Speaker pairing and device verification</div>\n </template>\n\n <template slot=\"content\">\n <p class=\"content\">\n If your speaker requires pairing then activate it below and enter the PIN that it displays.\n </p>\n\n <div v-for=\"output in outputs\" :key=\"output.id\">\n <div class=\"field\">\n <div class=\"control\">\n <label class=\"checkbox\">\n <input type=\"checkbox\" v-model=\"output.selected\" @change=\"output_toggle(output.id)\"> {{ output.name }}\n </label>\n </div>\n </div>\n <form @submit.prevent=\"kickoff_verification(output.id)\" v-if=\"output.needs_auth_key\" class=\"fd-has-margin-bottom\">\n <div class=\"field is-grouped\">\n <div class=\"control\">\n <input class=\"input\" type=\"text\" placeholder=\"Enter verification code\" v-model=\"verification_req.pin\">\n </div>\n <div class=\"control\">\n <button class=\"button is-info\" type=\"submit\">Verify</button>\n </div>\n </div>\n </form>\n </div>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsSettings from '@/components/TabsSettings'\nimport webapi from '@/webapi'\n\nexport default {\n name: 'SettingsPageRemotesOutputs',\n components: { ContentWithHeading, TabsSettings },\n\n data () {\n return {\n pairing_req: { pin: '' },\n verification_req: { pin: '' }\n }\n },\n\n computed: {\n pairing () {\n return this.$store.state.pairing\n },\n\n outputs () {\n return this.$store.state.outputs\n }\n },\n\n methods: {\n kickoff_pairing () {\n webapi.pairing_kickoff(this.pairing_req)\n },\n\n output_toggle (outputId) {\n webapi.output_toggle(outputId)\n },\n\n kickoff_verification (outputId) {\n webapi.output_update(outputId, this.verification_req)\n }\n },\n\n filters: {\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsPageRemotesOutputs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsPageRemotesOutputs.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SettingsPageRemotesOutputs.vue?vue&type=template&id=7ab6c051&\"\nimport script from \"./SettingsPageRemotesOutputs.vue?vue&type=script&lang=js&\"\nexport * from \"./SettingsPageRemotesOutputs.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport store from '@/store'\nimport * as types from '@/store/mutation_types'\nimport PageQueue from '@/pages/PageQueue'\nimport PageNowPlaying from '@/pages/PageNowPlaying'\nimport PageBrowse from '@/pages/PageBrowse'\nimport PageBrowseRecentlyAdded from '@/pages/PageBrowseRecentlyAdded'\nimport PageBrowseRecentlyPlayed from '@/pages/PageBrowseRecentlyPlayed'\nimport PageArtists from '@/pages/PageArtists'\nimport PageArtist from '@/pages/PageArtist'\nimport PageAlbums from '@/pages/PageAlbums'\nimport PageAlbum from '@/pages/PageAlbum'\nimport PageGenres from '@/pages/PageGenres'\nimport PageGenre from '@/pages/PageGenre'\nimport PageGenreTracks from '@/pages/PageGenreTracks'\nimport PageArtistTracks from '@/pages/PageArtistTracks'\nimport PageComposers from '@/pages/PageComposers'\nimport PageComposer from '@/pages/PageComposer'\nimport PageComposerTracks from '@/pages/PageComposerTracks'\nimport PagePodcasts from '@/pages/PagePodcasts'\nimport PagePodcast from '@/pages/PagePodcast'\nimport PageAudiobooksAlbums from '@/pages/PageAudiobooksAlbums'\nimport PageAudiobooksArtists from '@/pages/PageAudiobooksArtists'\nimport PageAudiobooksArtist from '@/pages/PageAudiobooksArtist'\nimport PageAudiobooksAlbum from '@/pages/PageAudiobooksAlbum'\nimport PagePlaylists from '@/pages/PagePlaylists'\nimport PagePlaylist from '@/pages/PagePlaylist'\nimport PageFiles from '@/pages/PageFiles'\nimport PageRadioStreams from '@/pages/PageRadioStreams'\nimport PageSearch from '@/pages/PageSearch'\nimport PageAbout from '@/pages/PageAbout'\nimport SpotifyPageBrowse from '@/pages/SpotifyPageBrowse'\nimport SpotifyPageBrowseNewReleases from '@/pages/SpotifyPageBrowseNewReleases'\nimport SpotifyPageBrowseFeaturedPlaylists from '@/pages/SpotifyPageBrowseFeaturedPlaylists'\nimport SpotifyPageArtist from '@/pages/SpotifyPageArtist'\nimport SpotifyPageAlbum from '@/pages/SpotifyPageAlbum'\nimport SpotifyPagePlaylist from '@/pages/SpotifyPagePlaylist'\nimport SpotifyPageSearch from '@/pages/SpotifyPageSearch'\nimport SettingsPageWebinterface from '@/pages/SettingsPageWebinterface'\nimport SettingsPageArtwork from '@/pages/SettingsPageArtwork'\nimport SettingsPageOnlineServices from '@/pages/SettingsPageOnlineServices'\nimport SettingsPageRemotesOutputs from '@/pages/SettingsPageRemotesOutputs'\n\nVue.use(VueRouter)\n\nexport const router = new VueRouter({\n routes: [\n {\n path: '/',\n name: 'PageQueue',\n component: PageQueue\n },\n {\n path: '/about',\n name: 'About',\n component: PageAbout\n },\n {\n path: '/now-playing',\n name: 'Now playing',\n component: PageNowPlaying\n },\n {\n path: '/music',\n redirect: '/music/browse'\n },\n {\n path: '/music/browse',\n name: 'Browse',\n component: PageBrowse,\n meta: { show_progress: true, has_tabs: true }\n },\n {\n path: '/music/browse/recently_added',\n name: 'Browse Recently Added',\n component: PageBrowseRecentlyAdded,\n meta: { show_progress: true, has_tabs: true }\n },\n {\n path: '/music/browse/recently_played',\n name: 'Browse Recently Played',\n component: PageBrowseRecentlyPlayed,\n meta: { show_progress: true, has_tabs: true }\n },\n {\n path: '/music/artists',\n name: 'Artists',\n component: PageArtists,\n meta: { show_progress: true, has_tabs: true, has_index: true }\n },\n {\n path: '/music/artists/:artist_id',\n name: 'Artist',\n component: PageArtist,\n meta: { show_progress: true, has_index: true }\n },\n {\n path: '/music/artists/:artist_id/tracks',\n name: 'Tracks',\n component: PageArtistTracks,\n meta: { show_progress: true, has_index: true }\n },\n {\n path: '/music/albums',\n name: 'Albums',\n component: PageAlbums,\n meta: { show_progress: true, has_tabs: true, has_index: true }\n },\n {\n path: '/music/albums/:album_id',\n name: 'Album',\n component: PageAlbum,\n meta: { show_progress: true }\n },\n {\n path: '/music/genres',\n name: 'Genres',\n component: PageGenres,\n meta: { show_progress: true, has_tabs: true, has_index: true }\n },\n {\n path: '/music/genres/:genre',\n name: 'Genre',\n component: PageGenre,\n meta: { show_progress: true, has_index: true }\n },\n {\n path: '/music/genres/:genre/tracks',\n name: 'GenreTracks',\n component: PageGenreTracks,\n meta: { show_progress: true, has_index: true }\n },\n {\n path: '/music/composers',\n name: 'Composers',\n component: PageComposers,\n meta: { show_progress: true, has_tabs: true, has_index: true }\n },\n {\n path: '/music/composers/:composer/albums',\n name: 'ComposerAlbums',\n component: PageComposer,\n meta: { show_progress: true, has_tabs: true, has_index: true }\n },\n {\n path: '/music/composers/:composer/tracks',\n name: 'ComposerTracks',\n component: PageComposerTracks,\n meta: { show_progress: true, has_tabs: true, has_index: true }\n },\n {\n path: '/podcasts',\n name: 'Podcasts',\n component: PagePodcasts,\n meta: { show_progress: true }\n },\n {\n path: '/podcasts/:album_id',\n name: 'Podcast',\n component: PagePodcast,\n meta: { show_progress: true }\n },\n {\n path: '/audiobooks',\n redirect: '/audiobooks/artists'\n },\n {\n path: '/audiobooks/artists',\n name: 'AudiobooksArtists',\n component: PageAudiobooksArtists,\n meta: { show_progress: true, has_tabs: true, has_index: true }\n },\n {\n path: '/audiobooks/artists/:artist_id',\n name: 'AudiobooksArtist',\n component: PageAudiobooksArtist,\n meta: { show_progress: true }\n },\n {\n path: '/audiobooks/albums',\n name: 'AudiobooksAlbums',\n component: PageAudiobooksAlbums,\n meta: { show_progress: true, has_tabs: true, has_index: true }\n },\n {\n path: '/audiobooks/:album_id',\n name: 'Audiobook',\n component: PageAudiobooksAlbum,\n meta: { show_progress: true }\n },\n {\n path: '/radio',\n name: 'Radio',\n component: PageRadioStreams,\n meta: { show_progress: true }\n },\n {\n path: '/files',\n name: 'Files',\n component: PageFiles,\n meta: { show_progress: true }\n },\n {\n path: '/playlists',\n redirect: '/playlists/0'\n },\n {\n path: '/playlists/:playlist_id',\n name: 'Playlists',\n component: PagePlaylists,\n meta: { show_progress: true }\n },\n {\n path: '/playlists/:playlist_id/tracks',\n name: 'Playlist',\n component: PagePlaylist,\n meta: { show_progress: true }\n },\n {\n path: '/search',\n redirect: '/search/library'\n },\n {\n path: '/search/library',\n name: 'Search Library',\n component: PageSearch\n },\n {\n path: '/music/spotify',\n name: 'Spotify',\n component: SpotifyPageBrowse,\n meta: { show_progress: true, has_tabs: true }\n },\n {\n path: '/music/spotify/new-releases',\n name: 'Spotify Browse New Releases',\n component: SpotifyPageBrowseNewReleases,\n meta: { show_progress: true, has_tabs: true }\n },\n {\n path: '/music/spotify/featured-playlists',\n name: 'Spotify Browse Featured Playlists',\n component: SpotifyPageBrowseFeaturedPlaylists,\n meta: { show_progress: true, has_tabs: true }\n },\n {\n path: '/music/spotify/artists/:artist_id',\n name: 'Spotify Artist',\n component: SpotifyPageArtist,\n meta: { show_progress: true }\n },\n {\n path: '/music/spotify/albums/:album_id',\n name: 'Spotify Album',\n component: SpotifyPageAlbum,\n meta: { show_progress: true }\n },\n {\n path: '/music/spotify/playlists/:playlist_id',\n name: 'Spotify Playlist',\n component: SpotifyPagePlaylist,\n meta: { show_progress: true }\n },\n {\n path: '/search/spotify',\n name: 'Spotify Search',\n component: SpotifyPageSearch\n },\n {\n path: '/settings/webinterface',\n name: 'Settings Webinterface',\n component: SettingsPageWebinterface\n },\n {\n path: '/settings/artwork',\n name: 'Settings Artwork',\n component: SettingsPageArtwork\n },\n {\n path: '/settings/online-services',\n name: 'Settings Online Services',\n component: SettingsPageOnlineServices\n },\n {\n path: '/settings/remotes-outputs',\n name: 'Settings Remotes Outputs',\n component: SettingsPageRemotesOutputs\n }\n ],\n scrollBehavior (to, from, savedPosition) {\n // console.log(to.path + '_' + from.path + '__' + to.hash + ' savedPosition:' + savedPosition)\n if (savedPosition) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(savedPosition)\n }, 10)\n })\n } else if (to.path === from.path && to.hash) {\n return { selector: to.hash, offset: { x: 0, y: 120 } }\n } else if (to.hash) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve({ selector: to.hash, offset: { x: 0, y: 120 } })\n }, 10)\n })\n } else if (to.meta.has_index) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n if (to.meta.has_tabs) {\n resolve({ selector: '#top', offset: { x: 0, y: 140 } })\n } else {\n resolve({ selector: '#top', offset: { x: 0, y: 100 } })\n }\n }, 10)\n })\n } else {\n return { x: 0, y: 0 }\n }\n }\n})\n\nrouter.beforeEach((to, from, next) => {\n if (store.state.show_burger_menu) {\n store.commit(types.SHOW_BURGER_MENU, false)\n next(false)\n return\n }\n if (store.state.show_player_menu) {\n store.commit(types.SHOW_PLAYER_MENU, false)\n next(false)\n return\n }\n next(true)\n})\n","import Vue from 'vue'\nimport moment from 'moment'\nimport momentDurationFormatSetup from 'moment-duration-format'\n\nmomentDurationFormatSetup(moment)\nVue.filter('duration', function (value, format) {\n if (format) {\n return moment.duration(value).format(format)\n }\n return moment.duration(value).format('hh:*mm:ss')\n})\n\nVue.filter('time', function (value, format) {\n if (format) {\n return moment(value).format(format)\n }\n return moment(value).format()\n})\n\nVue.filter('timeFromNow', function (value, withoutSuffix) {\n return moment(value).fromNow(withoutSuffix)\n})\n\nVue.filter('number', function (value) {\n return value.toLocaleString()\n})\n\nVue.filter('channels', function (value) {\n if (value === 1) {\n return 'mono'\n }\n if (value === 2) {\n return 'stereo'\n }\n if (!value) {\n return ''\n }\n return value + ' channels'\n})\n","import Vue from 'vue'\nimport VueProgressBar from 'vue-progressbar'\n\nVue.use(VueProgressBar, {\n color: 'hsl(204, 86%, 53%)',\n failedColor: 'red',\n height: '1px'\n})\n","// The Vue build version to load with the `import` command\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\nimport Vue from 'vue'\nimport App from './App'\nimport { router } from './router'\nimport store from './store'\nimport './filter'\nimport './progress'\nimport vClickOutside from 'v-click-outside'\nimport VueTinyLazyloadImg from 'vue-tiny-lazyload-img'\nimport VueObserveVisibility from 'vue-observe-visibility'\nimport VueScrollTo from 'vue-scrollto'\nimport 'mdi/css/materialdesignicons.css'\nimport 'vue-range-slider/dist/vue-range-slider.css'\nimport './mystyles.scss'\n\nVue.config.productionTip = false\n\nVue.use(vClickOutside)\nVue.use(VueTinyLazyloadImg)\nVue.use(VueObserveVisibility)\nVue.use(VueScrollTo)\n\n/* eslint-disable no-new */\nnew Vue({\n el: '#app',\n router,\n store,\n components: { App },\n template: '<App/>'\n})\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notifications.vue?vue&type=style&index=0&lang=css&\"","import { render, staticRenderFns } from \"./ContentWithHero.vue?vue&type=template&id=357bedaa&\"\nimport script from \"./ContentWithHero.vue?vue&type=script&lang=js&\"\nexport * from \"./ContentWithHero.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} |